1

全て。X-Fi サウンド ブラスター カードを介して A/V レシーバーと接続する必要があるプロジェクトがあります。A/V レシーバーは 7.1 スピーカー システムに接続されています。シミュレーターで航空機のコックピット情報を指示できるように、各 7.1 チャンネルに個別にアクセスする最初から最後までの方法を知りたいです。私は OpenAL を使用しており、このコードを C で書いています。うまくいくと思われるコードをいくつか開発しましたが、他の 6 台のスピーカーでオーディオのにじみが発生しています。以下は、私がすでに書いたコードの一部のサンプルです。ここで誰かが私を助けてくれることを願っています。

ありがとう、ヴィンセント。ALint PlayStatus;

switch (event)
{
    case EVENT_COMMIT:
        //Load user selected .wav file into the buffer that is initialized here, "InitBuf".
        LoadDotWavFile();        

        //Generate a source, attach buffer to source, set source position, and play sound.
        alGenSources(NumOfSources, &NorthWestSource);      
        ErrorCheck();

        //Attach the buffer that contains the .wav file's data to the source. 
        alSourcei(NorthWestSource, AL_BUFFER, WavFileDataBuffer);
        ErrorCheck();

        //Set source's position, velocity, and orientation/direction.
        alSourcefv(NorthWestSource, AL_POSITION, SourcePosition);
        ErrorCheck();
        alSourcefv(NorthWestSource, AL_VELOCITY, SourceVelocity);
        ErrorCheck();
        alSourcefv(NorthWestSource, AL_DIRECTION, SourceDirectionNorthWest);
        ErrorCheck();
        alSourcei(NorthWestSource, AL_SOURCE_RELATIVE, AL_TRUE);
        ErrorCheck();
        alSourcei(NorthWestSource, AL_CONE_INNER_ANGLE, 180);
        ErrorCheck();
        alSourcei(NorthWestSource, AL_CONE_OUTER_ANGLE, 270);
        ErrorCheck();
        SetCtrlVal(panelHandle, PANEL_SOURCEISSET, 1);

        //Play the user selected file by playing the sources.
        alSourcePlay(NorthWestSource);
        ErrorCheck();

        //Check that the .wav file has finished playing and if so clean things up.
        do
        {
            alGetSourcei(NorthWestSource, AL_SOURCE_STATE, &PlayStatus);
            if(PlayStatus != AL_PLAYING)
            {
                printf("File done playing. \n");
            }//End do-while if statement
        }
        while(PlayStatus == AL_PLAYING);

        //Clean things up more before exiting out of this audio projection.
        alDeleteSources(NumOfSources, &NorthWestSource);
        ErrorCheck();
        alDeleteBuffers(NumOfBuffers, &WavFileDataBuffer);
        ErrorCheck();
        SetCtrlVal(panelHandle, PANEL_SOURCEISSET, 0);
        //alDeleteBuffers(NumOfBuffers, 
        break;
}
return 0;

}`

4

1 に答える 1

0

私は同じ問題に直面しています。左耳または右耳のどちらかでトーンを再生したい。私がこれまでに見つけた唯一の方法は、サウンドでステレオ バッファ (7.1 バッファ) を作成し、他のチャネル (... 他の 7 チャネル) の情報をゼロで上書きしてから再生することです。リスナーの目の前のソースから。

これが私の回避策です。私はそれが不器用であることを知っています。しかし、openAL にとどまり、ALSA を直接 (Linux の場合) または CoreAudio (Mac の場合) を使用してプログラミングすることを避けたい場合、これ以上良い方法は見つかりませんでした。

あなたの質問にもっと直接的に答えるには: いいえ、直接言う方法はないようです (私が望んでいたように):

乾杯、

ファリード

于 2014-02-17T18:08:55.003 に答える