Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.85.76] |
|
Сообщ.
#1
,
|
|
|
Всем доброго времени суток, у меня возник оди вопрос. Я пишу плеер на dshow и встал вопрос визуализации, данные в буфер я получил, но со считыванием проблема, какой бы не был WAV в потоке, все равно скачут индикаторы обоих каналов даже если по факту я слышу один, о второй просто задавлен. Вот код
Function GetLevelData(Buffer: Pointer; Bytes: Cardinal; FSampleSize : Word; Channels : LongWord):TCESoundData; var i: Integer; SamplesRead : LongWord; FBufferSize : LongWord; Tempos,Temres:integer; temppp : Smallint; temppp2 : Smallint; begin FBufferSize:=0; if (Buffer = nil) or (Bytes = 0) then Exit; SamplesRead := Bytes div FSampleSize; if SamplesRead > FBufferSize then begin FBufferSize := SamplesRead; Tempos:=0; for i := 0 to FSampleSize do Begin Temres := FBufferSize - Tempos; if Temres > 0 then begin if Temres > Channels div 2 then Temres := Channels div 2; Move(Pointer(Longint(Buffer)+Tempos)^, temppp, Temres); Inc(Tempos, Temres); Move(Pointer(Longint(Buffer)+Tempos)^, temppp2, Temres); Inc(Tempos, Temres); end; end; end; Result.LevelData:=makelong(temppp, temppp2); end; Данные такие: Buffer- сам буфер с данными, Bytes размер буфера, FSAmpleSize = BitsPerSample div 8; Channels количество каналов(по факту 2, но один специально убавлен до 0 в Audition) |
Сообщ.
#2
,
|
|
|
Все спасибо тема закрыта, всему виной моя невнимательнось нужно было не Temres := Channels div 2 о просто Temres := 2 и поменял декодер, а то он слал вместо PCM какой-то IEEE Float
|