2017-01-12 6 views
0

Я хочу записывать/записывать в данный момент аудиовоспроизведение в UWP или Windows Phone 8.1, то же самое делает приложение UWP MEE dj в своем приложении, это приложение позволяет захватывать воспроизводимые в данный момент аудио в приложении. Кто-нибудь знает об этом, пожалуйста, ответьте.Запись/запись в настоящее время Воспроизведение аудио

ответ

1

как установить входные узлы воспроизведения музыки вместо микрофона

Windows.Media.Audio namespace содержит AudioDeviceInputNode, AudioDeviceOutputNode, AudioFileInputNode, AudioFileOutputNode и так далее. Микрофон для ввода - AudioDeviceInputNode, но для воспроизведения музыкального файла вам необходимо использовать AudioFileInputNode.

Окей, но как я могу захватить этот звук и сохранить его на хранение

Для сохранения в памяти, как я уже говорил выше, мы должны использовать AudioFileOutputNode. Вот простая демонстрация, вы можете загрузить файл для записи и выбрать файл из хранилища для сохранения результата записи. Код выглядит следующим образом:

XAML Code

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Padding="50"> 
    <TextBlock x:Name="txtresult" ></TextBlock> 
    <Button x:Name="fileButton" Content="Load audio File for recording" Click="File_Click" MinWidth="120" MinHeight="45" Margin="0,20,0,0"/> 
    <Button x:Name="OutpuyfileButton" Content="Load output File for save the recording result" Click="OutpuyfileButton_Click" MinWidth="120" MinHeight="45" Margin="0,20,0,0"/> 
    <Button x:Name="graphButton" Content="Start playing" Click="Graph_Click" MinWidth="120" MinHeight="45" Margin="0,50,0,20"/> 
    <Button x:Name="graphrecord" Content="Begin recording" Click="graphrecord_Click" ></Button> 
</StackPanel> 

код за

private AudioFileInputNode fileInput; 
    private AudioFileOutputNode fileOutputNode; 
    private AudioDeviceOutputNode deviceOutput; 
    private AudioGraph graph; 

    StorageFile outputfile; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 
    protected override async void OnNavigatedTo(NavigationEventArgs e) 
    { 
     await CreateAudioGraph(); 
    } 
    private async Task CreateAudioGraph() 
    { 
     // Create an AudioGraph with default settings 
     AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Media); 
     CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings); 
     if (result.Status != AudioGraphCreationStatus.Success) 
     { 
      // Cannot create graph 
      await new MessageDialog(String.Format("AudioGraph Creation Error because {0}", result.Status.ToString())).ShowAsync(); 
      return; 
     } 
     graph = result.Graph; 
     // Create a device output node 
     CreateAudioDeviceOutputNodeResult deviceOutputNodeResult = await graph.CreateDeviceOutputNodeAsync(); 
     if (deviceOutputNodeResult.Status != AudioDeviceNodeCreationStatus.Success) 
     { 
      // Cannot create device output node 
     txtresult.Text+="\n"+ String.Format("Device Output unavailable because {0}", deviceOutputNodeResult.Status.ToString()); 
      return; 
     } 
     deviceOutput = deviceOutputNodeResult.DeviceOutputNode; 
     txtresult.Text += "\n" + "Device Output Node successfully created"; 
    } 
    private async void File_Click(object sender, RoutedEventArgs e) 
    { 
     // If another file is already loaded into the FileInput node 
     if (fileInput != null) 
     { 
      fileInput.Dispose(); 
     } 
     FileOpenPicker filePicker = new FileOpenPicker(); 
     filePicker.SuggestedStartLocation = PickerLocationId.MusicLibrary; 
     filePicker.FileTypeFilter.Add(".mp3"); 
     filePicker.FileTypeFilter.Add(".wav"); 
     filePicker.FileTypeFilter.Add(".wma"); 
     filePicker.FileTypeFilter.Add(".m4a"); 
     filePicker.ViewMode = PickerViewMode.Thumbnail; 
     StorageFile file = await filePicker.PickSingleFileAsync(); 
     // File can be null if cancel is hit in the file picker 
     if (file == null) 
     { 
      return; 
     } 
     CreateAudioFileInputNodeResult fileInputResult = await graph.CreateFileInputNodeAsync(file); 
     if (AudioFileNodeCreationStatus.Success != fileInputResult.Status) 
     { 
      // Cannot read input file 
      await new MessageDialog(String.Format("Cannot read input file because {0}", fileInputResult.Status.ToString())).ShowAsync(); 
      return; 
     } 

     fileInput = fileInputResult.FileInputNode; 
     txtresult.Text += "\n" + "File load successfully,input nodes created"; 
    } 

    private void Graph_Click(object sender, RoutedEventArgs e) 
    { 
     if (graphButton.Content.Equals("Start playing")) 
     { 
      fileInput.AddOutgoingConnection(deviceOutput); 
      graph.Start();    
      graphButton.IsEnabled = false; 
     } 
    } 

    private async void OutpuyfileButton_Click(object sender, RoutedEventArgs e) 
    { 
     FileSavePicker saveFilePicker = new FileSavePicker(); 
     saveFilePicker.FileTypeChoices.Add("Pulse Code Modulation", new List<string>() { ".wav" }); 
     saveFilePicker.FileTypeChoices.Add("Windows Media Audio", new List<string>() { ".wma" }); 
     saveFilePicker.FileTypeChoices.Add("MPEG Audio Layer-3", new List<string>() { ".mp3" }); 
     saveFilePicker.SuggestedFileName = "New Audio Track"; 
     outputfile = await saveFilePicker.PickSaveFileAsync(); 
     // File can be null if cancel is hit in the file picker 
     if (outputfile == null) 
     { 
      return; 
     } 

     txtresult.Text +="\n"+ String.Format("Recording to {0}", outputfile.Name.ToString()); 
    } 
    private MediaEncodingProfile CreateMediaEncodingProfile(StorageFile file) 
    { 
     switch (file.FileType.ToString().ToLowerInvariant()) 
     { 
      case ".wma": 
       return MediaEncodingProfile.CreateWma(AudioEncodingQuality.High); 
      case ".mp3": 
       return MediaEncodingProfile.CreateMp3(AudioEncodingQuality.High); 
      case ".wav": 
       return MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); 
      default: 
       throw new ArgumentException(); 
     } 
    } 

    private async void graphrecord_Click(object sender, RoutedEventArgs e) 
    { 
     if (graphrecord.Content.Equals("Begin recording")) 
     { 
      MediaEncodingProfile fileProfile = CreateMediaEncodingProfile(outputfile); 
      CreateAudioFileOutputNodeResult fileOutputNodeResult = await graph.CreateFileOutputNodeAsync(outputfile, fileProfile); 
      if (fileOutputNodeResult.Status != AudioFileNodeCreationStatus.Success) 
      { 
       // FileOutputNode creation failed 
       await new MessageDialog(String.Format("Cannot create output file because {0}", fileOutputNodeResult.Status.ToString())).ShowAsync(); 
       return; 
      } 
      fileOutputNode = fileOutputNodeResult.FileOutputNode; 
      fileInput.AddOutgoingConnection(fileOutputNode); 
      graphrecord.Content = "Stop recording"; 
     } 
     else 
     { 
      graph.Stop(); 
      TranscodeFailureReason finalizeResult = await fileOutputNode.FinalizeAsync(); 
      if (finalizeResult != TranscodeFailureReason.None) 
      { 
       // Finalization of file failed. Check result code to see why 
       await new MessageDialog(String.Format("Finalization of file failed because {0}", finalizeResult.ToString())).ShowAsync(); 
       return; 
      } 
      txtresult.Text += "\n" + "Recording completed"; 
      graphrecord.IsEnabled = false; 
     } 
    } 

Для других сложных функций, пожалуйста, по-прежнему ссылается на официальный образец.

+0

Oh Thank's You, это работает очень хорошо ...... :) –

1

Вы можете использовать API в пространстве имен Windows.Media.Audio, чтобы создавать аудиографики для сценариев аудио-маршрутизации, микширования и обработки. Для того, чтобы создать звуковые графики, пожалуйста, обратитесь к this article.

Звуковой граф представляет собой набор взаимосвязанных аудиоустройств. Аудиофайл, который вы хотите записать, снабжает «узлы аудиовхода», а «узлы вывода аудио» - это место назначения для обработки звука, обрабатываемого графиком, аудио может быть выведено из графика в целевые аудиофайлы. В приложении магазина «MeeDJ» оно может смешивать два звука и записывать их в один. В этой ситуации мы можем использовать «узлы субмикширования», которые берут звук из одного или нескольких узлов и объединяют их в один вывод.

Для начала и остановки записи мы можем попытаться использовать Starting and stopping audio graph nodes для реализации. Вы также можете попробовать Adding audio effects, как это делали «MeeDJ».

Дополнительные функции и примеры кода, пожалуйста, обратитесь к official sample.

+0

OKay, но как я могу захватить этот звук и сохранить его в памяти. –

+0

. Все данные сценарии в примере создания звука - это студия звукозаписи через микрофон, не для воспроизведения звука. –

+1

@ShubhamSahu образец, который вы нашли для записи через микрофон, поскольку входные входные сигналы являются микрофонным входом , Подробно прочитав сценарий1 и документ, который вы найдете, вы можете сделать то, что хотите. Кроме того, образец для справки, он не может предоставить одну и ту же демонстрацию, как вы хотите, также я не могу написать ее для вас. API-интерфейсы поддерживают то, что вы хотите, я уже предоставляю, как это сделать, но детали вам нужны. –

Смежные вопросы