[英]Overriding iOS Audio Output
我一直在為一個正在研究的項目做一些研究,試圖確定是否可以通過編程方式重定向音頻輸出。 假設我有一個通過USB連接到iPhone的音頻混音器盒。 該USB支持音頻輸入和輸出路由。 我知道如何“檢測”外部USB附件是否已連接到iPhone,並且我知道如何檢測AVAudioSession的輸入和輸出。 現在,讓我發布一些示例代碼,並將其理解為到目前為止。
AVAudioSessionRouteDescription *route = [[AVAudioSession sharedInstance] currentRoute];
//Check the route inputs
for( AVAudioSessionPortDescription *inputDescription in route.inputs)
{
NSLog(@"Port Name: %@", inputDescription.portName);
NSLog(@"Port Description: %@", inputDescription.portType);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Input Ports" message:[NSString stringWithFormat:@"INPUT PORT NAME NAME: %@ INPUT PORT DESCRIPTION: %@ INPUT ROUTE COUNT: %lu",inputDescription.portName, inputDescription.portType, (unsigned long)[route.outputs count]] delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok" , nil];
[alert show];
[self setInput:inputDescription];
}
if(route.inputs.count == 0)
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Input Ports" message:@"Did not detect any input connections" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok" , nil];
[alert show];
}
//Check the route outputs
for( AVAudioSessionPortDescription *portDescription in route.outputs )
{
NSLog(@"Port Name: %@", portDescription.portName);
NSLog(@"Port Description: %@", portDescription.portType);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Output Ports" message:[NSString stringWithFormat:@"OUTPUT PORT NAME NAME: %@ OUTPUT PORT DESCRIPTION: %@ OUTPUT ROUTE COUNT: %lu",portDescription.portName, portDescription.portType, (unsigned long)[route.outputs count]] delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok" , nil];
[alert show];
}
我還知道如何“替代” iOS輸出,以便它涉及內置揚聲器而不是耳機。
NSError *error;
AVAudioSession *session = [AVAudioSession sharedInstance];
BOOL overrideSuccess = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
if(overrideSuccess)
{
NSLog(@"Override succeeded");
}
理想情況下,我希望能夠執行以下操作:
我不確定是否可以做這最后一步。
這個想法是讓用戶進行錄音而不僅限於iOS設備的外部麥克風。 如果我想要實現什么,將不勝感激任何提示或建議。 另外,我已經詳細瀏覽了Apple文檔,無法得出100%可行與否的結論。
如果使用AVAudioSession,則可以使用“ overrideOutputAudioPort:error:”方法來完成。 這是指向AVAudioSession類參考的鏈接: https : //developer.apple.com/library/IOs/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.