Искаженный звук при подаче данных на гнездо — .wav двоичные данные в цифровые сигналы?

После некоторого устранения неполадок я понял (по крайней мере, я почти уверен), что через звуковые порты я передаю неверные значения через библиотеку JackAudio.

Это функция обратного вызова, которая в настоящее время работает, но производит невероятно искаженные звуки.

Я подозреваю, что мне нужно превратить мои двоичные (затем преобразованные в десятичные) данные в float сигнал от -1 до 1.

Как я могу сделать последнее?

Прямо сейчас я передаю ему 16-битный музыкальный файл. Каждый образец имеет размер short,

static int Process( jack_nframes_t nframes, void * arg )
{

SamplerClass * SamplerPtr = ( SamplerClass * ) arg;

jack_default_audio_sample_t * LeftChannel, * RightChannel;

LeftChannel = ( jack_default_audio_sample_t * ) jack_port_get_buffer( LeftChannelOutputPort, nframes );

RightChannel = ( jack_default_audio_sample_t * ) jack_port_get_buffer( RightChannelOutputPort, nframes );

for( unsigned int i = 0; i<nframes; i++)
{
LeftChannel[i] = SamplerPtr->SoundFile->getSoundDataRef().at( SamplerPtr->SamplePosition ) ;
RightChannel[i] = SamplerPtr->SoundFile->getSoundDataRef().at( SamplerPtr->SamplePosition + 1;

SamplerPtr->SamplePosition = SamplerPtr->SamplePosition + 2;
}

return 0;
}

getSoundDataRef() возвращает vector<short> и я получаю образец позиции через vector::at,

Я отслеживаю положение образца из публичной переменной int через SamplePtr->SamplePosition;

Вот отладочный вывод формата данных, который находится внутри вектора для 16-битного образца стереоволны 41000 Гц. Так что, похоже, данные, назначенные каналам, верны.

[INFO] [ 18:48:50.492] 288756 vec index RCh >1844
[INFO] [ 18:48:50.492] 288757 vec index LCh >1401
[INFO] [ 18:48:50.492] 288758 vec index RCh >-1251

-1

Решение

Как и в обсуждении комментариев, решение состоит в том, чтобы передать ПРАВИЛЬНЫЙ формат данных в библиотеку Jackaudio — в этом случае формат является плавающей точкой в ​​диапазоне от -1,0 до 1,0, где исходные данные short int, поэтому конвертируем каждый образец по формуле x = sample / 32767.0; даст желаемый результат.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]