Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT QAudiooutput仅在立体声时通过左耳播放_Qt - Fatal编程技术网

QT QAudiooutput仅在立体声时通过左耳播放

QT QAudiooutput仅在立体声时通过左耳播放,qt,Qt,我目前正在尝试用立体声播放信号发生器。目前正在发生的是,虽然该格式已被接受,但它最终只播放来自左耳的音频。然而,当我切换到单声道时,它可以通过双耳正常工作。然而,我想做的是让它在我可以控制我从哪只耳朵收听的地方。例如,如果我只想让它在左耳上播放,我只会听到左耳上的音频,但是我也希望能够切换耳朵或同时使用两个耳朵。我目前使用的方法如下 format.setFrequency(44100); format.setChannels(2); format.setSampleSiz

我目前正在尝试用立体声播放信号发生器。目前正在发生的是,虽然该格式已被接受,但它最终只播放来自左耳的音频。然而,当我切换到单声道时,它可以通过双耳正常工作。然而,我想做的是让它在我可以控制我从哪只耳朵收听的地方。例如,如果我只想让它在左耳上播放,我只会听到左耳上的音频,但是我也希望能够切换耳朵或同时使用两个耳朵。我目前使用的方法如下

    format.setFrequency(44100);
    format.setChannels(2);
    format.setSampleSize(16);
    format.setCodec("audio/pcm");
    format.setByteOrder(QAudioFormat::LittleEndian);
    format.setSampleType(QAudioFormat::SignedInt);
    //This is just the format setup.

    // i am using push mode for this program
    audio_outputStream = new QAudioOutput(format, this);
    audio_outputDevice = audio_outputStream->start();

    //now when i write the numbers from the signal generator i use this  method

    QByteArray array;
    array.append(integerValueThatIsConvertedToConstChar,SizeOfInt);

    //And i write the data from the ByteArray to the IODevice as such
     audio_outputDevice.write(array.data(),MaxSizeOfInt);

    //Afterwhich i remove the front of the ByteArray for the next number to be appended and wrote in. 
    array.remove(0,SizeOfInt);

如前所述,我在代码中使用的上述步骤确实适用于单声道的单调,但当使用双声道立体声时,仅在左侧播放。我的目标是能够通过推送模式控制我正在写入的频道。我目前不明白为什么它目前只使用两个通道中的一个,难道我没有写入第二个通道吗?

音频输出具有首选的缓冲区大小。每次写调用都会传递一个这样大小的缓冲区吗?我必须检查一下,我最近在处理今天早些时候的大小,但仍然没有改变。我正在玩的大小变化是在写操作上,但是如果我理解正确,我必须在调用写操作之前将更多数据放入缓冲区?每个write()应该至少传递
QAudioOutput::periodSize()
字节。这解决了它不能写入正确通道的问题。我在书写中没有使用正确的大小。假设周期大小的缓冲区的前一半在左声道,另一半在右声道,我的假设是否正确?查看格式规范(PCM是交错的)。音频输出有一个首选的缓冲区大小。每次写调用都会传递一个这样大小的缓冲区吗?我必须检查一下,我最近在处理今天早些时候的大小,但仍然没有改变。我正在玩的大小变化是在写操作上,但是如果我理解正确,我必须在调用写操作之前将更多数据放入缓冲区?每个write()应该至少传递
QAudioOutput::periodSize()
字节。这解决了它不能写入正确通道的问题。我在书写中没有使用正确的大小。假设周期大小的缓冲区的前一半在左通道上,另一半在右通道上,我的假设是否正确?查看格式规范(PCM是交错的)。