-1

少しトラブルシューティングを行った後、JackAudio ライブラリを介してサウンド ポートに間違った種類の値を供給していることに気付きました (少なくとも私は確信しています)。

これは現在機能しているコールバック関数ですが、信じられないほど歪んだサウンドを生成します。

float2 進数 (後で 10 進数に変換) データを-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()は a を返し、vector<short>を介してサンプル位置を取得しますvector::at

SamplePtr->SamplePosition;を介して public int 変数からサンプル位置を追跡しています。

16 ビット 41000Hz ステレオ ウェーブ サンプルのベクトル内にあるデータ形式のデバッグ出力を次に示します。したがって、チャネルに割り当てられたデータは正しいようです。

[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
4

1 に答える 1