Tag: audio

如何阻止AVAudioPlayer在数据到达之前重复执行?

通过将numberOfLoops属性设置为-1,我正在使用AVAudioPlayer播放循环声音。 我想以编程方式控制循环速率,所以我正在像这样加载我的audio数据: NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Click" ofType:@"aif"]; NSMutableData *soundData = [NSMutableData dataWithContentsOfFile:soundFilePath]; 然后在初始化audio播放器之前更改其长度: int loopDuration = .5; // seconds int desiredDataLength = loopDuration * 2 * 44100; // this assumes 16-bit mono data [soundData setLength:desiredDataLength]; NSLog(@"data: %@", soundData); // this shows the data after our length change AVAudioPlayer soundPlayer = [[AVAudioPlayer alloc] initWithData:soundData […]

使用Core Audio控制单声道播放输出

我正在开发iOS应用程序,使用RemoteIOaudio单元录制来自麦克风的audio,进行处理并输出到扬声器(耳机)。 目前我使用单声道(单声道)进行input和输出。 我想要做的是让用户select一个输出扬声器:只剩下,只有右侧,或两者兼而有之。 我目前的代码只支持“两个”设置 – 两个扬声器都有相同的声音。 以下是我如何设置input和输出总线的stream格式(kAudioUnitProperty_StreamFormat): AudioStreamBasicDescription ASBD = {0}; size_t bytesPerSample = sizeof(SInt16); ASBD.mFormatID = kAudioFormatLinearPCM; ASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; ASBD.mSampleRate = 44100; ASBD.mFramesPerPacket = 1; ASBD.mBytesPerFrame = bytesPerSample; ASBD.mBytesPerPacket = bytesPerSample; ASBD.mBitsPerChannel = 8 * bytesPerSample; ASBD.mChannelsPerFrame = 1; 而我的渲染callback(kAudioUnitProperty_SetRenderCallback)看起来大致是这样的: AudioUnitRender(remoteIO, ioActionFlags, inTimeStamp, inputBus, inNumberFrames, ioData); SInt16 *renderBuffer = ioData->mBuffers[0].mData; // […]

如何在iOS中播放多个html5audio文件?

假设我有两个audio文件。 我把它们和我的javascript联系起来。 var audio1 = new Audio(); audio1.src = 'file1'; audio1.load(); var audio2 = new Audio(); audio2.src = 'file2'; audio2.load(); 当我播放audio1然后播放audio2,移动Safari(ios)停止audio1,然后播放audio2。 它只发生在ios safari上。

AudioOutputUnitStart非常慢

我有一个播放单声道audio事件的代码(在各种频率下发出短促的哔声)。 我创build一个AudioOutputUnit,停下来,每当我需要播放audio。 我开始吧 当我玩了所需的时间,我停下来。 听起来很简单。 但是,AudioOutputUnitStart通常需要180ms才能在我的iPhone 4S(iOS 5.1)上返回,这太方便了。 这里是AudioOutputUnit的创build/初始化 void createAOU() { m_init = false; // find the default playback output unit AudioComponentDescription defaultOutputDescription; defaultOutputDescription.componentType = kAudioUnitType_Output; defaultOutputDescription.componentSubType = kAudioUnitSubType_RemoteIO; defaultOutputDescription.componentManufacturer = kAudioUnitManufacturer_Apple; defaultOutputDescription.componentFlags = 0; defaultOutputDescription.componentFlagsMask = 0; // Get the default playback output unit AudioComponent defaultOutput = AudioComponentFindNext(NULL, &defaultOutputDescription); if (defaultOutput == NULL) […]

使用audiokit在AKsequencer中创build额外MIDI轨道的问题

我一直试图解决一个神秘的正弦波问题,并没有成功。 我在这里开始一个新的问题,因为我想我已经深入到这个问题的细节。 当build立一个AKSequencer,并给它一个MIDI文件,我看到一些奇怪的结果。 对于一首4首曲目(有相应的4首曲目midi文件,持续时间与歌曲的所有歌词相匹配),我看到音序器实际上是由5首曲目产生的。 什么是额外的轨道? 另外,我在控制台中出现错误: [seq] 1026: Invalid beat range 我相信当轨道是空的时候会发生这种情况。 所以这看起来像是我神秘的正弦波的罪魁祸首。 任何想法如何我可以解决这个问题? 这让我有点疯狂 😜谢谢!

logging使用OpenAL播放的样本

我在iOS上使用OpenAL同时播放9个循环。 为了使循环100%同步,它们开始在不同的线程上播放。 任何使用OpenALlogging正在播放的指针/教程。 威尔我遇到的问题录音给我使用不同的线程?

如何获得使用MPMediaPickerControllerselect的文件的path?

这是我如何编码打开媒体select器列表 – (void)viewDidLoad { [super viewDidLoad]; player=[MPMusicPlayerController iPodMusicPlayer]; picker=[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAnyAudio]; [picker setDelegate:self]; picker.prompt=@"Add an audio to application"; } 我也实现了它的委托方法 – (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { /*I know only here I can get path but don't know how? mediaItemCollection don't have such kind of properties or any method to get selected file path. So is […]

如何从讲话示例中使用AQRecorder

我已经从speakHere例子以及所有其他需要的文件中复制了AQRecorder。 这样做后,我重命名链中的任何类,因为编译错误使用它,这似乎是现在解决。 但是我仍然无法弄清楚如何使用AQRecorder类。 这个例子中有另一个名为SpeakHereController的类,但是也没有工作。 这里是我最近一次尝试的代码: #import "AQRecorder.h" AQRecorder recorder; [recorder startRecord]; 错误:接收机types错误'AQRecorder' 我知道这不会工作的原因有一个,它不调用构造函数,我相信这应该是一个指针。 我有很多不同的变化,就像我说我也尝试使用SpeakHereController: SpeakHereController * recorder; recorder = [[SpeakHereController alloc]init]; [recorder startRecord]; 但是这给错误: 架构i386的未定义符号:“AQPlayer :: StopQueue()”,引用自: – SpeakHereController.o中的[SpeakHereController stopPlayQueue] “AQPlayer :: PauseQueue()”,引用自: – SpeakHereController.o中的[SpeakHereController pausePlayQueue] “AQPlayer :: DisposeQueue(unsigned char)”,引用自: – SpeakHereController.o中的[SpeakHereController stopRecord] “AQPlayer :: CreateQueueForFile(__ CFString const *)”,引用自: – SpeakHereController.o中的[SpeakHereController stopRecord] 在SpeakHereController.o中的SpeakHereController.o interruptListener(void *,unsigned […]

iOS:如何播放audio没有FPS滴?

我正在使用Sprite Kit开发iOS 9+游戏,最好使用Swift库。 目前我正在使用一个Singleton,我预先加载我的audio文件,每个连接到一个单独的AVAudioPlayer实例。 下面是一个简短的代码,以获得这个想法: import SpriteKit import AudioToolbox import AVFoundation class AudioEngine { static let sharedInstance = AudioEngine() internal var sfxPing: AVAudioPlayer private init() { self.sfxPing = AVAudioPlayer() if let path = NSBundle.mainBundle().pathForResource("ping", ofType: "m4a") { do { let url = NSURL(fileURLWithPath:path) sfxPing = try AVAudioPlayer(contentsOfURL: url) sfxPing.prepareToPlay() } catch { print("ERROR: Can't load […]

通过蓝牙连接的扬声器播放

在我的应用程序中,我正在使用播放和logging类别: UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; CheckError( AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), &sessionCategory), "Couldn't set audio category"); 在应用程序中,任何播放的audio都将通过接收器初始输出,直到我设置为: UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute); 然而,我真正想要的是audio通过连接的蓝牙扬声器输出。 例如,我有一个通过蓝牙连接的扬声器。 我可以通过原生音乐应用程序播放音乐。 但是,在我的应用程序使用playandrecord类时,它只能在设备上播放。 我努力了: UInt32 allowBluetoothInput = 1; OSStatus stat = AudioSessionSetProperty ( kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, sizeof (allowBluetoothInput), &allowBluetoothInput ); 以及: CFStringRef audioRouteOverride = kAudioSessionOutputRoute_BluetoothHFP; OSStatus s = AudioSessionSetProperty (kAudioSessionProperty_OutputDestination, sizeof(audioRouteOverride),&audioRouteOverride); […]