如何修改SpeakHere示例应用程序以在iPhone上以单声道格式录制?

时间:2011-03-10 05:28:25

标签: objective-c ios4 audio-recording audioqueue

我是iPhone新手。你可以帮我修改Apple的SpeakHere应用程序,以单声道格式录制。我应该为mChannelsPerFrame设置什么以及我应该设置什么?

我已经在linearPCM WAVE格式上更改了部分记录。

以下是link发言。

以下是我认为他们允许我改变但我对声音不太了解:

void ChangeNumberChannels(UInt32 nChannels, bool interleaved)
                // alter an existing format
    {
        Assert(IsPCM(), "ChangeNumberChannels only works for PCM formats");
        UInt32 wordSize = SampleWordSize(); // get this before changing ANYTHING
        if (wordSize == 0)
            wordSize = (mBitsPerChannel + 7) / 8;
        mChannelsPerFrame = nChannels;
        mFramesPerPacket = 1;
        if (interleaved) {
            mBytesPerPacket = mBytesPerFrame = nChannels * wordSize;
            mFormatFlags &= ~kAudioFormatFlagIsNonInterleaved;
        } else {
            mBytesPerPacket = mBytesPerFrame = wordSize;
            mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
        }
    }

1 个答案:

答案 0 :(得分:0)

在iPhone上,您只能以单声道录制。

在SpeakHere示例中,您不需要做任何事情来设置它。它是自动完成的。例如,在AQRecorder::SetupAudioFormat

size = sizeof(mRecordFormat.mChannelsPerFrame);
XThrowIfError(AudioSessionGetProperty(  kAudioSessionProperty_CurrentHardwareInputNumberChannels, 
                &size, 
                &mRecordFormat.mChannelsPerFrame), "couldn't get input channel count");

获得支持的硬件输入通道并将其设置为ivar。在其他地方,缓冲区大小计算会将其计入。