Windows IoT Raspberry Pi 3 C # Перечислить USB-аудиоадаптер

Я собираюсь подключить 2 или более аудиоадаптера USB (каждый с микрофоном и линией) к моему raspberry pi 3. Поэтому мне нужно перечислить аудиоустройства для рендеринга и захвата звука соответственно и отобразить их на listbox, похожем на audioinsample. Я не понимаю, как это сделать. Я попытался поиграть с приведенными ниже кодами, произошел обработчик исключений. Пожалуйста, порекомендуйте. Спасибо.

        captureDeviceList = new ObservableCollection<DeviceInformation>();
        audioCaptureList.ItemsSource = captureDeviceList;

        renderDeviceList = new ObservableCollection<DeviceInformation>();
        audioRenderList.ItemsSource = renderDeviceList;


  private async void enumerateAudioDevice()
    {
        var renderDevices = await DeviceInformation.FindAllAsync(DeviceClass.AudioRender);

        if (renderDevices.Count > 0)
        {
            for (var i = 0; i < renderDevices.Count; i++)
            {
                renderDeviceList.Add(renderDevices[i]);
            }
            audioRenderList.SelectedItem = renderDevices[0];

        }


        var captureDevices = await DeviceInformation.FindAllAsync(DeviceClass.AudioCapture);
        if (captureDevices.Count > 0)
        {
            for (var i = 0; i < captureDevices.Count; i++)
            {
                captureDeviceList.Add(captureDevices[i]);
            }
            audioCaptureList.SelectedItem = captureDevices[0];

        }
    }

<PivotItem Header="Info">
            <Grid>
                <ListBox x:Name="audioRenderList" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="288" Margin="0,25,0,0" FontSize="10"/>
                <ListBox x:Name="audioCaptureList" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="288" Margin="318,25,0,0" FontSize="10"/>
                <TextBlock x:Name="renderDeviceCount" HorizontalAlignment="Left" Margin="248,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="40"/>
                <TextBlock x:Name="captureDeviceCount" HorizontalAlignment="Left" Margin="566,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="40" RenderTransformOrigin="0.425,-0.5"/>
                <TextBlock HorizontalAlignment="Left" Margin="318,0,0,0" TextWrapping="Wrap" Text="Capture Devices" VerticalAlignment="Top"/>
                <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Render Devices" VerticalAlignment="Top"/>
                <ListBox x:Name="usbList" HorizontalAlignment="Left" Height="100" Margin="0,158,0,0" VerticalAlignment="Top" Width="288"/>
                <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="USB Devices" VerticalAlignment="Top" Margin="0,133,0,0"/>
                <TextBlock x:Name="usbDeviceCount" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="248,133,0,0" Width="40"/>

            </Grid>
        </PivotItem>

Обновлено: я изменил свой код XAML ... он работает ... но похоже, что я не могу правильно расположить поля панели стека. Layot from my XAML  Выравнивание на фактическом дисплее неправильное

У меня есть код ниже. Какой-нибудь совет? Спасибо.

<PivotItem Header="Info">
            <Grid>
                <ListBox x:Name="audioRenderList" Margin="10,28,358,144" Width="250" Height="90">
                    <ListBox.ItemTemplate>
                        <DataTemplate x:DataType="device:DeviceInformation">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="0,0,0,0" FontSize="18"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <ListBox x:Name="audioCaptureList" Margin="344,28,10,144" Width="250" Height="90">
                    <ListBox.ItemTemplate>
                        <DataTemplate x:DataType="device:DeviceInformation">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="0,0,0,0" FontSize="18"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <TextBlock x:Name="renderDeviceCount" HorizontalAlignment="Left" Margin="220,4,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="40"/>
                <TextBlock x:Name="captureDeviceCount" HorizontalAlignment="Left" Margin="560,4,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="40" RenderTransformOrigin="0.425,-0.5"/>
                <TextBlock HorizontalAlignment="Left" Margin="350,4,0,0" TextWrapping="Wrap" Text="Capture Devices" VerticalAlignment="Top"/>
                <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Render Devices" VerticalAlignment="Top" Margin="10,4,0,0"/>
                <ListBox x:Name="usbList" Margin="10,156,358,16" Width="250" Height="90">
                    <ListBox.ItemTemplate>
                        <DataTemplate x:DataType="device:DeviceInformation">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="0,0,0,0" FontSize="18" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="USB Storage" VerticalAlignment="Top" Margin="10,131,0,0"/>
                <TextBlock x:Name="usbDeviceCount" HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Margin="220,131,0,0" Width="40" RenderTransformOrigin="0.575,-0.75"/>

            </Grid>
        </PivotItem>
    </Pivot>

Обновлено 10.09.2017

Я не понимаю, что моя маржа слишком велика. Она основана на том размере, который я хотел


person mylim    schedule 29.09.2017    source источник
comment
Где возникает исключение? Я пробовал использовать указанный выше код, исключений нет. Можете ли вы показать код привязки данных audioRenderList и audioCaptureList в своем xaml?   -  person Michael Xu - MSFT    schedule 02.10.2017
comment
Кстати, вы уверены, что код 'captureDeviceList.Add (renderDevices [i]); «Каково ваше ожидание?» В соответствии с пониманием имени переменной это должно быть «renderDeviceList.Add (renderDevices [i]); '   -  person Michael Xu - MSFT    schedule 02.10.2017
comment
Я перезапустил raspberry pi .. n удалось запустить код без исключения ... & Вы правы насчет renderdevicelist.add. Я отредактирую эту часть. Но я все еще не могу отобразить их в списке ..   -  person mylim    schedule 02.10.2017
comment
Пожалуйста, покажите коды элемента listbox на своей странице (файл * .xaml). Вы проверили количество своих устройств, установив точки останова в renderDevices.Count и captureDevices.Count • Некоторые устройства несовместимы с Raspberry PI.   -  person Michael Xu - MSFT    schedule 02.10.2017
comment
Мне удалось отобразить в списке .. но все они отображают одно и то же windows.devices.enumaration.devicenformation .. как определить и отобразить подробную информацию об устройстве?   -  person mylim    schedule 05.10.2017
comment
Я делаю это, потому что у меня будет одновременно подключено как минимум 2 аудиоустройства USB ... поэтому мне нужно их идентифицировать ... спасибо.   -  person mylim    schedule 05.10.2017


Ответы (1)


Потому что без вашего кода в xaml я не уверен, что вы используете для привязки данных. Есть несколько причин, вызывающих эту проблему. Пожалуйста, обратитесь к источнику ниже, возможно, вам нужно внести некоторые изменения, чтобы они соответствовали вашим требованиям. Кроме того, вы должны добавить < strong> xmlns: device = "using: Windows.Devices.Enumeration" в теге страницы.

<Page
x:Class="AudioInSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AudioInSample"
xmlns:device="using:Windows.Devices.Enumeration"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="White">
    <StackPanel Margin="10" MinWidth="500">

        <ListBox x:Name="audioCaptureList">
            <ListBox.ItemTemplate>
                <DataTemplate  x:DataType="device:DeviceInformation">
                    <StackPanel>
                        <TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="12, 15, 12, 0" FontSize="18.667" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <ListBox x:Name="audioRenderList">
            <ListBox.ItemTemplate>
                <DataTemplate x:DataType="device:DeviceInformation">
                    <StackPanel>
                        <TextBlock Text="{x:Bind Path=Name, Mode=OneWay}" Margin="12, 15, 12, 0" FontSize="18.667" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>


    </StackPanel>
</Grid>

person Michael Xu - MSFT    schedule 06.10.2017
comment
Привет, Мичил, я добавил свое обновление кода xaml в свой вопрос. Я попробую ваше предложение. - person mylim; 06.10.2017
comment
Привет, Мичил, я пробовал код ... он работает ... но, похоже, возникла проблема с маржей, когда я обновил jpeg по своему вопросу. Можете посоветовать? - person mylim; 09.10.2017
comment
На вашей странице значение элементов 'Margin' необходимо изменить, чтобы оно соответствовало макету. Подробнее о свойстве Margin см. msdn.microsoft.com/en-us/ библиотека / - person Michael Xu - MSFT; 09.10.2017
comment
поле списка? или поля stackpanel? потому что я пробовал stackpanel & textblock margin .. не помогает. - person mylim; 09.10.2017
comment
Измените поля списка. [Маржа = 10,28,358,144] кажется слишком большой. - person Michael Xu - MSFT; 09.10.2017
comment
Привет, Майкл, я попытался изменить размер, но он все тот же. Я загрузил еще одно изображение, размер поля моего списка считается разумным, поскольку он основан на выделенном мной распределении. - person mylim; 09.10.2017
comment
Вам следует переопределить макет сетки с помощью Grid.ColumnDefinitions и Grid.RowDefinitions, см. Образец (mikaelkoskinen.net/post/). - person Michael Xu - MSFT; 09.10.2017
comment
Привет, Майкл, мне удалось заставить его работать. Я не уверен, что это ошибка. Я в основном создал копию всего нового проекта и вставил точный код .. и он работает .. - person mylim; 09.10.2017
comment
Привет, Мичил, на основе моей процедуры enumerateAudioDevice () могу ли я создать событие для DeviceWatcher, вызывающее enumerateAudioDevice ()? - person mylim; 14.10.2017