通过使用文件名录制多个片段,我尝试在SpeakHere
中录制多个单独的短语音片段,我想连续播放它们,以固定的固定时间间隔分隔每个片段的开头。我想让这一系列片段永远地循环播放,或者直到用户停止播放。
我的问题是如何改变SpeakHere
这样做?
(我说" 尝试"因为我还没有能够在我的Mac Mini iPhone模拟器上运行SpeakHere
。That is the subject of another question因为another question on the subject of multiple files也未得到回答。)
在SpeakHereController.mm
中,播放录制文件的方法定义如下。请注意最后的else
子句调用player->StartQueue(false)
- (IBAction)play:(id)sender
{
if (player->IsRunning())
{ [snip]
}
else
{
OSStatus result = player->StartQueue(false);
if (result == noErr)
[[NSNotificationCenter defaultCenter] postNotificationName:@"playbackQueueResumed" object:self];
}
}
以下摘自SpeakHere
AQPlayer.mm
OSStatus AQPlayer::StartQueue(BOOL inResume)
{
// if we have a file but no queue, create one now
if ((mQueue == NULL) && (mFilePath != NULL)) CreateQueueForFile(mFilePath);
mIsDone = false;
// if we are not resuming, we also should restart the file read index
if (!inResume) {
mCurrentPacket = 0;
// prime the queue with some data before starting
for (int i = 0; i < kNumberBuffers; ++i) {
AQBufferCallback (this, mQueue, mBuffers[i]);
}
}
return AudioQueueStart(mQueue, NULL);
}
那么,可以使用方法play
和AQPlayer::StartQueue
来播放多个文件,如何强制执行间隔,以及如何重复循环?
我对方法&#39;记录`的代码的修改如下,所以你可以看到如何创建多个文件。
- (IBAction)record:(id)sender
{
if (recorder->IsRunning()) // If we are currently recording, stop and save the file.
{
[self stopRecord];
}
else // If we're not recording, start.
{
self.counter = self.counter + 1 ; //Added *****
btn_play.enabled = NO;
// Set the button's state to "stop"
btn_record.title = @"Stop";
// Start the recorder
NSString *filename = [[NSString alloc] initWithFormat:@"recordedFile%d.caf",self.counter];
// recorder->StartRecord(CFSTR("recordedFile.caf"));
recorder->StartRecord((CFStringRef)filename);
[self setFileDescriptionForFormat:recorder->DataFormat() withName:@"Recorded File"];
// Hook the level meter up to the Audio Queue for the recorder
[lvlMeter_in setAq: recorder->Queue()];
}
}
答案 0 :(得分:0)
在iOS上与当地的“聚会”小组交谈后,我了解到我的问题的简单解决方案是避免AudioQueues
而是使用“更高级别”AVAudioRecorder
和{{1来自AVAudioPlayer
。
我还发现如何使用我的Mac Mini在模拟器上部分测试我的应用程序:将带有USB的Olympus录音机插入我的Mini作为输入“语音”。这可以作为iSight的替代品,它不会在Mini上产生输入音频。