- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个连接到 AUGraph 的简单波形发生器。我重复使用了 Apple 的一些示例代码来设置 AudioStreamBasicDescription ,如下所示
void SetCanonical(UInt32 nChannels, bool interleaved)
// note: leaves sample rate untouched
{
mFormatID = kAudioFormatLinearPCM;
int sampleSize = SizeOf32(AudioSampleType);
mFormatFlags = kAudioFormatFlagsCanonical;
mBitsPerChannel = 8 * sampleSize;
mChannelsPerFrame = nChannels;
mFramesPerPacket = 1;
if (interleaved)
mBytesPerPacket = mBytesPerFrame = nChannels * sampleSize;
else {
mBytesPerPacket = mBytesPerFrame = sampleSize;
mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
}
}
在我的课上我调用这个函数
mClientFormat.SetCanonical(2, true);
mClientFormat.mSampleRate = kSampleRate;
采样率是
#define kSampleRate 44100.0f;
其他设置也取自示例代码
// output unit
CAComponentDescription output_desc(kAudioUnitType_Output, kAudioUnitSubType_RemoteIO, kAudioUnitManufacturer_Apple);
// iPodEQ unit
CAComponentDescription eq_desc(kAudioUnitType_Effect, kAudioUnitSubType_AUiPodEQ, kAudioUnitManufacturer_Apple);
// multichannel mixer unit
CAComponentDescription mixer_desc(kAudioUnitType_Mixer, kAudioUnitSubType_MultiChannelMixer, kAudioUnitManufacturer_Apple);
一切正常,但问题是当我尝试到达第二个缓冲区时,我没有获得立体声并且我的回调函数失败(访问错误)
Float32 *bufferLeft = (Float32 *)ioData->mBuffers[0].mData;
Float32 *bufferRight = (Float32 *)ioData->mBuffers[1].mData;
// Generate the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++)
{
switch (generator.soundType) {
case 0: //Sine
bufferLeft[frame] = sinf(thetaLeft) * amplitude;
bufferRight[frame] = sinf(thetaRight) * amplitude;
break;
看来我得到的是单声道而不是立体声。指针 bufferRight 为空,但不知道为什么。任何帮助将不胜感激。
最佳答案
我可以看到两个可能的错误。首先,正如@invalidname 所指出的,立体声录音可能不适用于 iPhone 等单声道设备。好吧,它可能会起作用,但如果它起作用了,你无论如何都会得到双单声道立体声流,所以何必呢?您不妨将您的流配置为在单声道模式下工作并节省 CPU 开销。
第二个问题可能是声音失真的来源。您的流描述格式标志应该是:
kAudioFormatFlagIsSignedInteger |
kAudioFormatFlagsNativeEndian |
kAudioFormatFlagIsPacked
此外,不要忘记将 mReserved 标志设置为 0。虽然此标志的值可能会被忽略,但将其显式设置为 0 只是为了确保安全。
编辑:在 iPhone 上调试音频的另一个更通用的技巧——如果您遇到失真、削波或其他奇怪的效果,请从您的手机中获取数据负载并在波形编辑器中查看录音。能够缩小并查看单个样本将为您提供很多关于问题所在的线索。
为此,您需要打开“管理器”窗口,点击您的手机,然后展开您的应用程序旁边的小箭头(与您通常卸载它的位置相同)。现在您会看到一个向下的小箭头,如果您单击它,Xcode 会将数据有效负载从您的应用程序复制到硬盘驱动器上的某个位置。如果您将录音转储到磁盘,您会在此处找到提取的文件。
引用自link
关于c++ - 通过 AUGraph 连接的 iOS 波形发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333055/
我有一个带有精心设计的渲染回调的应用程序,我怀疑它可以用 AVAudioEngine 来完成。 无论如何要在 AVAudioEngine 中使用我的 AUGraph 渲染回调(带有多个总线)? 任何示
我正在尝试在播放(渲染)期间重新排列 AUGraph 中的节点。特别是,我试图在这两种设置之间切换: 多 channel 调音台 -> 远程 I/O 多 channel 混频器 -> 转换器 #0 -
当我使用AUGraph实现麦克风播放声音时, 我有一个问题,在设备(iphone 3g)中,我只能从耳机的右侧听到声音, 但在模拟器中效果很好,我可以从耳机的两侧听到声音。 这是我用来将输入连接到输出
我在使用 MixerUnit 和 OutputUnit 从 AUGraph 获取音频时遇到问题。我构建了一个混合 2 个音频文件的图形。这是我创建图表的代码。我没有任何错误。 NSLog(@"init
我正在使用 Apple 的 MixerHost 应用程序。这是如何设置 AuGraph 的一个很好的例子,但是停止按钮实际上是一个暂停按钮。当您点击播放时,它会继续从最后一个位置播放声音文件。我想要一
我正在使用 MusicPlayer API。我知道当您将 .mid 作为序列加载时,API 会为您创建一个默认的 AUGraph,其中包括一个 AUSampler。这个 AUSampler 使用一
我正在尝试创建一个流线型的音频应用程序,它从 iPhone 获取麦克风输入的音量,并使用它来设置从另一个音频单元源播放的声音的音量。 我更愿意使用图表来完成所有这些工作。除了音量水平之外,我不需要来自
当我第一次启动 AUGraph 并使用 kAudioUnitSubType_AudioFilePlayer 组件播放歌曲时,我收到了断断续续的声音。卡顿时间大约为 3 秒,但这足以打扰我,而且我注意到
我正在尝试编写(应该是什么)一个简单的应用程序,该应用程序在 AUGraph 中按顺序包含一堆音频单元,然后将输出写入文件。我使用 AUGraphAddRenderNotify 添加了一个回调。这是我
我的 iOS 应用程序有 4 个文件播放器单元连接到 AUGraph 中的混音器单元。我希望用户能够将四个 filePlayer 单元的“混合”作为一个 .caf 文件通过电子邮件发送。 我通过将回调
我正在为 iOS 应用程序设计 AUGraph,希望能在以下方面提供帮助。 如果我想一次播放多个音频文件,是否每个文件都需要一个音频单元? 来自 Core-Audio 文档 Linear PCM an
我有一个 AUGraph 可以使用此设置播放和录制音频: RemoteIO -> -> RemoteIO
我正在使用 AUGraph 和 AUSampler 将 MIDI 信号转换为音频。该应用程序正常运行良好,但如果应用程序被中断,即被电话或计时器中断,则会出现问题。中断后 AUGraph 停止运行,没
我是 iOS 编程的新手(我更像是一个 Android 人..)并且必须构建一个处理音频 DSP 的应用程序。 (我知道这不是接近 iOS 开发人员的最简单方法;)) 应用需要能够接受来自以下方面的输
在 OSX 上,我正在为我的音频系统创建一个 AUGraph,如下所示: OSStatus result = NewAUGraph(&mGraph); AUNode outputNode; Audio
我有基于 AUGraph 的播放器(我需要均衡器)。播放器可以播放本地音频文件。现在我想添加支持流音频。我可以用它做什么?任何像 AVAssetReader 这样的标准类(AVAssertReader
要开始通话,我们的 VOIP 应用会设置一个 AVAudioSession,然后构建、初始化并运行一个 AUGraph。 在通话期间,我们允许用户使用以下代码在扬声器模式之间来回切换: avSessi
我正在开发一个包含 EQ 部分的合成器,想知道是否有人对音频单元链接在一起的顺序有建议。 目前我的图表看起来像这样: AUSampler -> Lowpass Unit -> Highpass Uni
我实现了一个类似于 iOS Developer's Library 上的 AUGraph .但是,在我的应用程序中,我需要能够以不同的采样率(可能是两个不同的采样率)播放声音。 我一直在查看 Appl
我在将混合器单元插入 AUGraph 时遇到问题,否则在 Mac OS 和 iOS 上都可以正常工作。 我的工作图如下所示: (My Audio render callback) node 2
我是一名优秀的程序员,十分优秀!