Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import "PlayPCM.h"
- AudioFileID audioFile;
- SInt64 inStartingPacket = 0;
- AudioQueueRef audioQueue;
- @implementation PlayPCM
- void AudioOutputCallback(
- void* inUserData,
- AudioQueueRef outAQ,
- AudioQueueBufferRef outBuffer)
- {
- AudioStreamPacketDescription* packetDescs;
- UInt32 bytesRead;
- UInt32 numPackets = 8000;
- OSStatus status;
- status = AudioFileReadPackets(audioFile,
- false,
- &bytesRead,
- packetDescs,
- inStartingPacket,
- &numPackets,
- outBuffer->mAudioData);
- if(numPackets)
- {
- outBuffer->mAudioDataByteSize = bytesRead;
- status = AudioQueueEnqueueBuffer(audioQueue,
- outBuffer,
- 0,
- packetDescs);
- inStartingPacket += numPackets;
- }
- else
- {
- NSLog(@"number of packets = null ") ;
- AudioQueueFreeBuffer(audioQueue, outBuffer);
- }
- }
- -(id)init{
- if (self = [super init]) {
- }
- return self;
- }
- - (void)setupAudioFormat
- {
- NSLog(@"setting format");
- format.mFormatID = kAudioFormatLinearPCM;
- format.mSampleRate = 44100;
- format.mFramesPerPacket = 1;
- format.mChannelsPerFrame = 1;
- format.mBytesPerFrame = 2;
- format.mBytesPerPacket = 2;
- format.mBitsPerChannel = 16;
- format.mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
- kLinearPCMFormatFlagIsSignedInteger |
- kLinearPCMFormatFlagIsPacked;
- }
- - (void)startPlayback
- {
- int counter = 0;
- [self setupAudioFormat];
- OSStatus status;
- NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
- NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@ "test1.wav"];
- NSLog(@"file path = %@",filePath);
- //fUrl = [NSURL URLWithPath:@"file:///Users/Inscripts/Desktop/test1.wav"];
- fUrl = [NSURL fileURLWithPath:filePath];
- //CFURLRef fileURL = (__bridge CFURLRef)(fUrl);
- CFURLRef fileURL = CFURLCreateWithString(NULL, (CFStringRef) filePath, NULL);
- status = AudioFileOpenURL(fileURL, kAudioFileReadPermission, 0,&audioFile);
- NSLog(@"file opening status = %d",(int)status);
- if(status == 0)
- { NSLog(@"file opened");
- status = AudioQueueNewOutput(&(format),
- AudioOutputCallback,
- (__bridge void *)(self),
- CFRunLoopGetCurrent(),
- kCFRunLoopCommonModes,
- 0,
- &audioQueue);
- NSLog(@"audio queue create status = %d",(int)status);
- if(status == 0)
- {
- AudioQueueAllocateBuffer(audioQueue, 1600000, &audioQueueBuffer);
- AudioOutputCallback((__bridge void *)(self), audioQueue, audioQueueBuffer);
- [self performSelector:@selector(startQueue) withObject:self afterDelay:50];
- }
- }
- if(status != 0)
- {
- NSLog(@"failed");
- // labelStatus.text = @"Play failed";
- }
- }
- -(void)startQueue{
- NSLog(@"start queue called");
- OSStatus status = AudioQueueStart(audioQueue, NULL);
- if(status == 0)
- {
- NSLog(@"ok");
- // labelStatus.text = @"Playing";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement