2010-03-03 40 views
13

Tôi đang cố gắng phát âm thanh sang tai nghe bluetooth (không phải A2DP) bằng AVAudioPlayer, AVAudioSession và AudioSessionSetProperty.cách định tuyến âm thanh iPhone sang tai nghe bluetooth

Có vẻ như có các chức năng để chọn tai nghe bluetooth làm đầu vào (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput), nhưng không tương đương để thiết lập đầu ra. Điều này được thực hiện trong ứng dụng Thư thoại, nơi bạn có thể chọn tai nghe, loa điện thoại hoặc loa điện thoại. Tôi đã thử kết hợp khác nhau của SessionCategories và các thuộc tính AudioSession, nhưng tôi chỉ có thể không có vẻ để nhấn vào một cách tiếp cận hoạt động.

Tôi chắc chắn ai đó đã tìm ra điều này, hãy chia sẻ một ví dụ?

+0

Có vẻ như không có ai giải quyết vấn đề này (cũng không ai nói ít nhất!) Tôi đã mở một vé hỗ trợ của Apple về chủ đề này và sẽ đăng câu trả lời khi tôi có. – Ethan

+0

bạn có bất kỳ phản hồi nào không? – Krishnan

+0

Vâng tôi đã làm. Để diễn giải, "không, bạn không thể làm điều đó." Tôi không nghĩ rằng kỹ sư thực sự hiểu những gì tôi đã yêu cầu, bởi vì tôi đã có thể hoàn thành nó. Tôi sẽ xem liệu tôi có thể đăng các phần thích hợp như một câu trả lời hay không. – Ethan

Trả lời

16

Thử nghiệm nhỏ này có hiệu quả đối với tôi ... nó bao gồm việc thiết lập tai nghe bluetooth làm đầu vào (không chắc chắn nếu đó là những gì bạn muốn). Xin lỗi về định dạng crappy trên mã ...

// create and set up the audio session 
AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
[audioSession setDelegate:self]; 
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
[audioSession setActive: YES error: nil]; 

// set up for bluetooth microphone input 
UInt32 allowBluetoothInput = 1; 
OSStatus stat = AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
         sizeof (allowBluetoothInput), 
         &allowBluetoothInput 
         ); 
NSLog(@"status = %x", stat); // problem if this is not zero 

// check the audio route 
UInt32 size = sizeof(CFStringRef); 
CFStringRef route; 
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route); 
NSLog(@"route = %@", route);  
// if bluetooth headset connected, should be "HeadsetBT" 
// if not connected, will be "ReceiverAndMicrophone" 

// now, play a quick sound we put in the bundle (bomb.wav) 
CFBundleRef mainBundle = CFBundleGetMainBundle(); 
CFURLRef  soundFileURLRef; 
SystemSoundID soundFileObject; 
soundFileURLRef = CFBundleCopyResourceURL (mainBundle,CFSTR ("bomb"),CFSTR ("wav"),NULL); 
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject); 
AudioServicesPlaySystemSound (soundFileObject);  // should play into headset 

Hy vọng điều đó sẽ hữu ích!

+0

Điều này trông giống như mã tôi đã kết thúc là tốt, xin lỗi tôi đã không đến đây và đánh dấu nó sớm hơn;) – Ethan

+0

"tài liệu đó là sai. Nó ảnh hưởng đến cả đầu vào và đầu ra." từ danh sách gửi thư coreaudio của Apple (http://lists.apple.com/archives/coreaudio-api/2009/Oct/msg00030.html) – mtoy

+2

AudioSessionSetProperty không còn được dùng nữa kể từ iOS7. Làm thế nào điều này sẽ giống như thế mà không cần sử dụng AudioSessionSetProperty? –

6

Tôi đã có thể làm việc này, nhưng phải mất một số việc. Tôi đã chắp ghép những mảnh thích hợp của mã ở đây:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err]; 

UInt32 allowBluetoothInput = 1; 
AudioSessionSetProperty(
    kAudioSessionProperty_OverrideCategoryEnableBluetoothInput, 
    sizeof (allowBluetoothInput), 
    &allowBluetoothInput); 

Nó cũng có thể mà nguồn có sẵn và chuyển qua lại giữa bluetooth, tai nghe, thiết bị cầm tay hoặc loa nhưng mọi thứ trở nên rất tham gia vào thời điểm đó. Trình quản lý nguồn âm thanh mà tôi viết cuối cùng là hơn 700 dòng.

+5

Tôi rất muốn xem cách chuyển đổi giữa các nguồn có sẵn, bạn có nghĩ rằng bạn có thể đặt mã đó ở chế độ công khai hoặc thêm một số thông tin vào hồ sơ của bạn nơi tôi có thể liên hệ với bạn không? –

+0

http://stackoverflow.com/questions/20393249/use-audio-unit-i-o-to-create-audio-on-the-fly – madLokesh

+0

Điều này đã hiệu quả. – user523234

Các vấn đề liên quan