- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ffmpeg 从 .mov 文件中获取音频。查看我的设置,我没有转换我正在生成的音频缓冲区的采样率,因此这不太可能解决我遇到的问题。无论我在内置输出上设置的采样率如何,我的 44.1 kHz 音频文件都会以正确的速率播放。如果我播放 48kHz 文件,文件播放速度较慢(以正常速率的 91%),这表明真实速率为 44.1kHz。我可以将内置输出更改为 44.1、48 或 96 kHz,并且存在相同的现象。我使用 Audio Midi Setup 应用程序更改了我的默认输出速率。然后我在我的 ouputAudioUnit 上使用 AudioUnitGetProperty 验证我的采样率。这与 Audio Midi 设置中的采样率相匹配。
想法?我包括我的音频图代码
CheckError(NewAUGraph(&fp.graph), "Couldn't create a new AUGraph");
//varispeednode has an input callback
//the vairspeed node feeds an output node which is running
//at the frequency of the system default output
AUNode outputNode;
AudioComponentDescription outputcd = [self defaultOutputComponent];
CheckError(AUGraphAddNode(fp.graph, &outputcd, &outputNode),
"AUGraphAddNode[kAudioUnitSubType_DefaultOutput] failed");
AUNode varispeedNode;
AudioComponentDescription varispeedcd = [self variSpeedComponent];
CheckError(AUGraphAddNode(fp.graph, &varispeedcd, &varispeedNode),
"AUGraphAddNode[kAudioUnitSubType_Varispeed] failed");
CheckError(AUGraphOpen(fp.graph),
"Couldn't Open AudioGraph");
CheckError(AUGraphNodeInfo(fp.graph, outputNode, NULL, &fp.outputAudioUnit),
"Couldn't Retrieve output node");
CheckError(AUGraphNodeInfo(fp.graph, varispeedNode, NULL, &fp.variSpeedAudioUnit),
"Couldn't Retrieve Varispeed Audio Unit");
AURenderCallbackStruct input;
input.inputProc = CBufferProviderCallback;
input.inputProcRefCon = &playerStruct;
CheckError(AudioUnitSetProperty(fp.variSpeedAudioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&input,
sizeof(input)),
"AudioUnitSetProperty failed");
CheckError(AUGraphConnectNodeInput(fp.graph, varispeedNode, 0, outputNode, 0),
"Couldn't Connect varispeed to output");
CheckError(AUGraphInitialize(fp.graph),
"Couldn't Initialize AUGraph");
// check output sample rate
Float64 outputSampleRate = 48000.0;
UInt32 sizeOfFloat64 = sizeof(Float64);
outputSampleRate = 0.0;
CheckError(AudioUnitGetProperty(fp.outputAudioUnit,
kAudioUnitProperty_SampleRate,
kAudioUnitScope_Global,
0,
&outputSampleRate,
&sizeOfFloat64),
"Couldn't get output sampleRate");
最佳答案
我解决了这个问题。构建音频图时,您需要指定变速音频单元的输入采样率,然后再将其连接到 augraph 内的输出节点。请参阅示例代码
https://developer.apple.com/library/content/samplecode/CAPlayThrough/Listings/ReadMe_txt.html
CheckError(NewAUGraph(&fp.graph), "BuildGraphError");
AUNode outputNode;
AudioComponentDescription outputcd = [self defaultOutputComponent];
CheckError(AUGraphAddNode(fp.graph, &outputcd, &outputNode),
"AUGraphAddNode[kAudioUnitSubType_DefaultOutput] failed");
AUNode varispeedNode;
AudioComponentDescription varispeedcd = [self variSpeedComponent];
CheckError(AUGraphAddNode(fp.graph, &varispeedcd, &varispeedNode),
"AUGraphAddNode[kAudioUnitSubType_Varispeed] failed");
CheckError(AUGraphOpen(fp.graph),
"Couldn't Open AudioGraph");
CheckError(AUGraphNodeInfo(fp.graph, outputNode, NULL, &fp.outputAudioUnit),
"Couldn't Retrieve File Audio Unit");
CheckError(AUGraphNodeInfo(fp.graph, varispeedNode, NULL, &fp.variSpeedAudioUnit),
"Couldn't Retrieve Varispeed Audio Unit");
AURenderCallbackStruct input;
input.inputProc = CBufferProviderCallback;
input.inputProcRefCon = &playerStruct;
CheckError(AudioUnitSetProperty(fp.variSpeedAudioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&input,
sizeof(input)),
"AudioUnitSetProperty failed");
//you have to set the varispeed rate before you connect it
//see CAPlayThrough
AudioStreamBasicDescription asbd = {0};
UInt32 size;
Boolean outWritable;
//Gets the size of the Stream Format Property and if it is writable
OSStatus result = AudioUnitGetPropertyInfo(fp.variSpeedAudioUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
0,
&size,
&outWritable);
//Get the current stream format of the output
result = AudioUnitGetProperty (fp.variSpeedAudioUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
0,
&asbd,
&size);
asbd.mSampleRate = targetSampleRate;
//Set the stream format of the output to match the input
result = AudioUnitSetProperty (fp.variSpeedAudioUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&asbd,
size);
printf("AudioUnitSetProperty result %d %d\n", result, noErr);
CheckError(AUGraphConnectNodeInput(fp.graph, varispeedNode, 0, outputNode, 0),
"Couldn't Connect varispeed to output");
CheckError(AUGraphInitialize(fp.graph),
"Couldn't Initialize AUGraph");
Float64 outputSampleRate = 48000.0;
UInt32 sizeOfFloat64 = sizeof(Float64);
outputSampleRate = 0.0;
CheckError(AudioUnitGetProperty(fp.outputAudioUnit,
kAudioUnitProperty_SampleRate,
kAudioUnitScope_Global,
0,
&outputSampleRate,
&sizeOfFloat64),
"Couldn't get output sampleRate");
NSLog(@"Output Sample Rate of the ->%f", outputSampleRate);
关于ffmpeg - CoreAudio 输出采样率差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083388/
我正在使用 ffmpeg 从 .mov 文件中获取音频。查看我的设置,我没有转换我正在生成的音频缓冲区的采样率,因此这不太可能解决我遇到的问题。无论我在内置输出上设置的采样率如何,我的 44.1 kH
我正在使用 AVAssetReaderAudioMixOutput 读取音频文件。因此,我将获得通常包含 2*8192 个样本的 AudioBuffer 对象。现在我想对 2*44100 个样本进行一
最近我遇到了下一个问题。我使用 CoreAudio AudioUnit (RemoteI/O) 在 iOS 应用程序中播放/录制声音流。 进入音频单元的声音流是 2 channel LPCM,16 位
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
首先,一些背景信息:我正在编写一个 MacOS/X 应用程序,它使用 CoreAudio 从 CoreAudio 设备的输入流接收音频信号,对音频进行一些实时处理,然后将其发送回该 CoreAudio
我正在制作一个基于 CoreAudio 的 FLAC 播放器,遇到了一个与 AudioQueues 相关的棘手问题。我正在像这样初始化我的东西(以下划线开头的变量是实例变量): _flacDe
我目前正在尝试获取iOS应用程序的传出音频信号,以便将其发送到Audiobus。我需要传出的AudioBufferLists才能路由它们。我正在使用OpenAL进行音频播放。 最好的情况是,我什至可以
我在使用 MixerUnit 和 OutputUnit 从 AUGraph 获取音频时遇到问题。我构建了一个混合 2 个音频文件的图形。这是我创建图表的代码。我没有任何错误。 NSLog(@"init
我根本无法弄清楚这个问题。下面代码中的音频播放速度非常快且断断续续。 SO 上还有一个类似的问题,但它是针对可变比特率的,不适用。 其他站点上的一些可能的答案(直接设置每个数据包的帧数)不再起作用并给
我对音频编程还很陌生,但我知道这一定是可行的。 (这是一个 iOS/iPhone 相关的问题)。 我如何在不改变音高的情况下改变加载的音频文件的速度,然后播放它? 我想我需要深入研究 CoreAudi
我的 C++ 技能很浅,但我设法完成了工作 - 直到我碰壁。当前的墙: 我正在使用 CoreAudio 做一些 Midi 播放。我有很多工作,但我坚持做一件简单的事情。 (我不知道正确的 C++ 术语
我有一个 iPhone 应用程序正在录制音频,然后通过网络广播它。为了响应来自远端的“停止”,它排队通知以停止记录。唉,当它到达 AudioQueueStop 调用时,应用程序只是挂起(即 Stop
我需要将输出采样率从 44.1 更改为 32.0,但它总是会引发错误,Out: AudioUnitSetProperty-SF=\217\325\377\377, -10865。我不知道为什么它会让我
我在iPhone上遇到AudioTimeStamps的问题。当我在模拟器中运行应用程序时,AudioTimeStamp.mHostTime似乎以纳秒(1,000,000,000秒)为单位,而在我的设备
我有一个基于 CoreAudio 的 MacOS/X 程序,它允许用户选择一个输入音频设备和一个输出音频设备,并且(如果用户没有为输入和输出选择相同的设备)我的程序创建了一个私有(private)的聚
我有一个关于 CoreAudio 和 AVFoundation 的问题。 我使用 CoreAudio 和 AUGraph 和 AudioUnit 构建了一个专业音频应用程序。 我想切换到看起来非常棒的
我对macOS编程比较陌生,但对一般编程却不是。我宁愿使用(Objective)C / C++而不是Swift。我需要打开一个特定的音频设备进行输出,并将音频数据的实时流从网络传输到输出设备。该设备具
在我看来,CoreAudio 在混合到单个 channel 时会将声波添加到一起。我的程序将发出合成声音。我知道每种声音的振幅。当我一起玩它们时,我应该将它们加在一起并乘以合成波以保持在范围内吗?我可
我正在构建一个 CoreAudio 应用程序,我需要在其中处理来自麦克风的原始输入样本。我使用两个线程,其中一个线程从麦克风输入中生成样本,另一个线程使用样本。这些线程共享一个(工作良好的)循环缓冲区
我试过下面的代码,但在执行它时给出了'fmt?'错误告诉我“此文件类型不支持数据格式”。不幸的是,我无法在任何地方找到解释如果要写入 AIFF 应该如何设置 AudioStreamBasicDescr
我是一名优秀的程序员,十分优秀!