簡體   English   中英

覆蓋iOS音頻輸出

[英]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");
}

理想情況下,我希望能夠執行以下操作:

  1. 檢測任何輸出並將其顯示給用戶。 (我可以做這個)
  2. 允許用戶“選擇”他們希望使用的輸出
  3. 覆蓋當前輸出路徑,以將輸出重定向到用戶希望使用的設備。

我不確定是否可以做這最后一步。

這個想法是讓用戶進行錄音而不僅限於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM