Проблема в том, что файл создан, но не имеет содержимого.
размер файла 0 КБ.
Это из-за того, что ваш код получает исключение в строке ниже при запуске на Raspberry Pi с Windows IoT Core, поэтому файл не был записан для содержимого. Если вы отладите приложение, вы будете прерваны из-за этого исключения.
await audioCapture.StartRecordToStorageFileAsync(MediaEncodingProfile.CreateMp3(AudioEncodingQuality.Auto), recordFile);
Вам нужно использовать следующие строки вместо вышеуказанной строки:
var audioRecording = await audioCapture.PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Auto), recordFile);
await audioRecording.StartAsync();
Ссылка: " MediaCapture.PrepareLowLagRecordToStorageFileAsync "
И в вашем коде есть другие проблемы.
isRecording
переменная никогда не инициируется и не присваивает какое-либо значение, поэтому она всегда false
Таким образом, эта строка никогда не может быть выполнена: await audioCapture.StopRecordAsync();
Unchecked()
может быть выполнен до завершения функции Checked()
, поскольку в методе Checked()
вы используете await
, поэтому код будет продолжен, затем Task.Delay(10000).Wait();
и Unchecked();
. В этом случае звук будет остановлен перед запуском.
Другим предложением является добавление try-catch в ваш код, чтобы вы могли обрабатывать исключения до завершения работы приложения.
Исходя из всего вышесказанного, я внес некоторые изменения в ваш код. Ниже приведен полный код, который вы можете попробовать, если он поможет.
MainPage.xaml:
<Page
x:Class="Recording_PI.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Recording_PI"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel VerticalAlignment="Center">
<TextBlock Name="Result" Text="" />
</StackPanel>
</Page>
MainPage.xaml.cs:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media.Capture;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using Windows.Media.MediaProperties;
using Windows.Media.Playback;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.ApplicationModel.Core;
using Windows.UI.Core;
namespace Recording_PI
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
bool isRecording;
LowLagMediaRecording audioRecording;
MediaCapture audioCapture = new MediaCapture();
public MainPage()
{
this.InitializeComponent();
Checked();
}
private async void Checked()
{
try
{
var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
settings.StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.Audio;
settings.MediaCategory = Windows.Media.Capture.MediaCategory.Other;
settings.AudioProcessing = Windows.Media.AudioProcessing.Default;
await audioCapture.InitializeAsync(settings);
StorageFolder externalDevices = KnownFolders.RemovableDevices;
IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync();
StorageFolder usbStorage = externalDrives[0];
//ENSURE FOLDER EXISTS
if (await usbStorage.TryGetItemAsync("Recording") == null)
await usbStorage.CreateFolderAsync("Recording");
string Folder_Pfad = "Recording\\" + DateTime.Now.Year.ToString();
if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
await usbStorage.CreateFolderAsync(Folder_Pfad);
Folder_Pfad = Folder_Pfad + "\\" + DateTime.Now.Month.ToString();
if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
await usbStorage.CreateFolderAsync(Folder_Pfad);
Folder_Pfad = Folder_Pfad + "\\" + DateTime.Now.Day.ToString();
if (await usbStorage.TryGetItemAsync(Folder_Pfad) == null)
await usbStorage.CreateFolderAsync(Folder_Pfad);
string Dateiname = "\\" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " "
+ DateTime.Now.Hour.ToString() + "_" + DateTime.Now.Minute.ToString() + "_" + DateTime.Now.Second.ToString() + ".mp3";
string Dateispeicher_Ort = Folder_Pfad + Dateiname;
StorageFile recordFile = await usbStorage.CreateFileAsync(Dateispeicher_Ort, Windows.Storage.CreationCollisionOption.GenerateUniqueName);
isRecording = true;
//await audioCapture.StartRecordToStorageFileAsync(MediaEncodingProfile.CreateMp3(AudioEncodingQuality.Auto), recordFile);
var audioRecording = await audioCapture.PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile.CreateM4a(AudioEncodingQuality.Medium), recordFile);
await audioRecording.StartAsync();
Task.Delay(10000).Wait();
Unchecked();
}
catch (Exception ex)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, ()=> {
Result.Text += ex.Message;
});
}
}
private async void Unchecked()
{
if (isRecording)
{
await audioCapture.StopRecordAsync();
}
}
}
}
Возможности в package.appxmanifest:
<Capabilities>
<uap:Capability Name="removableStorage" />
<DeviceCapability Name="microphone" />
</Capabilities>