Форум автозвука и установки музыки в автомобиль
Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 45

Android 24 bit/96 kHz

  1. #1
    Ушел в ЛАС Технический директор Array Репутация: лучше не знать Аватар для HoSStiA
    Регистрация
    11.01.2004
    Город/село
    Столиця
    Сообщений
    13,040
    Спасибо (Раздал)
    10629
    Спасибо (Получил)
    14167
    Ветеран форума

    Android 24 bit/96 kHz

    С подачи Rover'а, озадачились вопросами качества воспроизведения с Android-устройствах в роли источников звука. В частности, насколько жестко ограничение Google по 16 bit/44.1 kHz/ 2 channels, о котором утверждают разработчики.

    После прочтения съесть!

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

    Пресловутое ограничение, если такое и имеется в последних версиях Андроида, в большей степени связано с отсутствием необходимости закладывать в музыкальные приложения протоколы воспроизведения аудиофайлов с параметрами, превосходящими мультимедийные возможности SoC. Тем не менее, так как ядро Linux разрабатывалось для более широкого спектра устройств, базовая часть аппаратной поддержки звуковых карт, поддерживаемых ALSA, обеспечивается по умолчанию уже на этом уровне, но эти возможности попросту не используются оболочкой.

    Это можно продемонстрировать на следующем примере. Скачаем тестовые сэмплы в формате .wav для 16 и 24-битовых стандартов соответственно. Например, из следующей подборки: http://www.nordicaudiolabs.com/dart/ . Алгоритм "даунсэмплинга" в данный момент нам неинтересен, достаточно быть уверенными в параметрах тестируемого материала.

    Возможности встроенного звукового адаптера, как и ожидалось, ограничены 16 битами. Чего не скажешь про частоту дискретизации, все-таки целых 48 кГц, а не 44,1 кГц, имеют полное право на жизнь:

    Код:
    1|root@android:/mnt/extsd/test-samles # alsa_aplay -v -Dhw:0,0 16-hpt.wav      
    Playing WAVE '16-hpt.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
    Hardware PCM card 0 'audiocodec' device 0 subdevice 0
    Its setup is:
      stream       : PLAYBACK
      access       : RW_INTERLEAVED
      format       : S16_LE
      subformat    : STD
      channels     : 2
      rate         : 48000
      exact rate   : 48000 (48000/1)
      msbits       : 16
      buffer_size  : 8192
      period_size  : 2048
      period_time  : 42666
      tstamp_mode  : NONE
      period_step  : 1
      avail_min    : 2048
      period_event : 0
      start_threshold  : 8192
      stop_threshold   : 8192
      silence_threshold: 0
      silence_size : 0
      boundary     : 1073741824
      appl_ptr     : 0
      hw_ptr       : 0
    Но на 24 битах ждет разочарование:
    Код:
    1|root@android:/mnt/extsd/test-samles # alsa_aplay -vv -Dhw:0,0 24.wav         
    Playing WAVE '24.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo
    aplay: set_params:1054: Sample format non available
    Available formats:
    - S16_LE
    Теперь подключим карту, заведомо аппаратно поддерживающую 16/24 бит и 48/96 кГц:

    Код:
    root@android:/mnt/extsd/test-samles # alsa_aplay -v -Dhw:1,0 16-hpt.wav                                                                       
    Playing WAVE '16-hpt.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
    Hardware PCM card 1 'SB Audigy 2 NX' device 0 subdevice 0
    Its setup is:
      stream       : PLAYBACK
      access       : RW_INTERLEAVED
      format       : S16_LE
      subformat    : STD
      channels     : 2
      rate         : 48000
      exact rate   : 48000 (48000/1)
      msbits       : 16
      buffer_size  : 24000
      period_size  : 6000
      period_time  : 125000
      tstamp_mode  : NONE
      period_step  : 1
      avail_min    : 6000
      period_event : 0
      start_threshold  : 24000
      stop_threshold   : 24000
      silence_threshold: 0
      silence_size : 0
      boundary     : 1572864000
      appl_ptr     : 0
      hw_ptr       : 0
    Код:
    1|root@android:/mnt/extsd/test-samles # alsa_aplay -v -Dhw:1,0 24.wav                                                                         
    Playing WAVE '24.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo
    Hardware PCM card 1 'SB Audigy 2 NX' device 0 subdevice 0
    Its setup is:
      stream       : PLAYBACK
      access       : RW_INTERLEAVED
      format       : S24_3LE
      subformat    : STD
      channels     : 2
      rate         : 48000
      exact rate   : 48000 (48000/1)
      msbits       : 24
      buffer_size  : 24000
      period_size  : 6000
      period_time  : 125000
      tstamp_mode  : NONE
      period_step  : 1
      avail_min    : 6000
      period_event : 0
      start_threshold  : 24000
      stop_threshold   : 24000
      silence_threshold: 0
      silence_size : 0
      boundary     : 1572864000
      appl_ptr     : 0
      hw_ptr       : 0
    И, как можно убедиться, список поддерживаемых форматов довольно длинный:
    Код:
    root@android:/ # cat /proc/asound/card1/stream0                                                                                                 
    Creative Technology Ltd SB Audigy 2 NX at usb-sw_hcd_host0-1, high speed : USB Audio
    
    Playback:
      Status: Stop
      Interface 1
        Altset 3
        Format: S16_LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 4
        Format: S24_3LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 5
        Format: S16_LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 1000 us
      Interface 1
        Altset 6
        Format: S24_3LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 1000 us
      Interface 1
        Altset 7
        Format: S16_LE
        Channels: 4
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 8
        Format: S24_3LE
        Channels: 4
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 9
        Format: S16_LE
        Channels: 4
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 1000 us
      Interface 1
        Altset 10
        Format: S24_3LE
        Channels: 4
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 125 us
      Interface 1
        Altset 11
        Format: S16_LE
        Channels: 6
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 12
        Format: S24_3LE
        Channels: 6
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 13
        Format: S16_LE
        Channels: 6
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 125 us
      Interface 1
        Altset 14
        Format: S24_3LE
        Channels: 6
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 125 us
      Interface 1
        Altset 15
        Format: S16_LE
        Channels: 8
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 1
        Altset 16
        Format: S24_3LE
        Channels: 8
        Endpoint: 1 OUT (ASYNC)
        Rates: 48000
        Data packet interval: 125 us
      Interface 1
        Altset 17
        Format: S16_LE
        Channels: 8
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 125 us
      Interface 1
        Altset 18
        Format: S24_3LE
        Channels: 8
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000
        Data packet interval: 125 us
    
    Capture:
      Status: Stop
      Interface 2
        Altset 5
        Format: S16_LE
        Channels: 2
        Endpoint: 2 IN (NONE)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 2
        Altset 6
        Format: S24_3LE
        Channels: 2
        Endpoint: 2 IN (NONE)
        Rates: 48000
        Data packet interval: 1000 us
      Interface 2
        Altset 7
        Format: S16_LE
        Channels: 2
        Endpoint: 2 IN (NONE)
        Rates: 96000
        Data packet interval: 1000 us
      Interface 2
        Altset 8
        Format: S24_3LE
        Channels: 2
        Endpoint: 2 IN (NONE)
        Rates: 96000
        Data packet interval: 1000 us
    При этом стандартное приложение "Музыка" при воспроизведении 24.wav, вероятно, действительно пытается "на лету" преобразовать в другой формат, о чем свидетельствуют жуткий скрежет каждые несколько тактов. Иные же приложения, jetAUDIO к примеру, воспроизводят 24.wav, на первый взгляд, точно так же, как и команда alsa_aplay из консоли.

    ---------- Сообщение добавлено 19.01.2014 в 02:57 ----------

    Также стоит внимательно рассмотреть функции и структуры данных библиотеки, отвечающие непосредственно за создание аудиопотока:

    Код:
    /* Configuration for a stream */
    struct pcm_config {
        unsigned int channels_min;
        unsigned int channels_max;
        unsigned int rate_max;
        unsigned int rate_min;
        unsigned int channels;
        unsigned int rate;
        unsigned int period_size;
        unsigned int period_count;
        enum pcm_format format;
    
        /* Values to use for the ALSA start, stop and silence thresholds.  Setting
         * any one of these values to 0 will cause the default tinyalsa values to be
         * used instead.  Tinyalsa defaults are as follows.
         *
         * start_threshold   : period_count * period_size
         * stop_threshold    : period_count * period_size
         * silence_threshold : 0
         */
        unsigned int start_threshold;
        unsigned int stop_threshold;
        unsigned int silence_threshold;
        int avail_min;
    
            unsigned int in_init_channels;//keep the record init channels
    };
    
    struct pcm *pcm_open_req(unsigned int card, unsigned int device,
                         unsigned int flags, struct pcm_config *config, int requested_rate);
    При этом предпочтительные параметры конфигурации могут быть назначены при вызове из audio.primary.exDroid.so, как это реализовано в нашем решении для a13 Андроид зеркало на Allwinner A13 в части частоты дискретизации, что дает возможность корректировать обращения к аудиосистеме со стороны стандартных приложений Android, если они содержат в себе излишние ограничения.

    ---------- Сообщение добавлено 19.01.2014 в 15:02 ----------

    Предопределив желаемую частоту дискретизации для библиотеки audio.primary.exDroid.so через параметры конфигурации системы audio.usb.out.freq, и перенаправив все вызовы на собственную функцию pcm_open_req вместо pmp_open, мы получили возможность передавать эту настройку через переменную requested_rate
    struct pcm *pcm_open_req(unsigned int card, unsigned int device,
    unsigned int flags, struct pcm_config *config, int requested_rate);
    как задавая эти ограничения жестко
    Код:
    /* android default out sampling rate*/
    #define DEFAULT_OUT_SAMPLING_RATE SAMPLING_RATE_44K
    <...>
        LOGD("start_output_stream: card:%d, port:%d, rate:%d", card, port, out->config.rate);
    
        out->pcm = pcm_open_req(card, port, PCM_OUT | PCM_MMAP | PCM_NOIRQ, &out->config, DEFAULT_OUT_SAMPLING_RATE);
    , так и прибегая к "умной" модели выбора
    Код:
            int in_ajust_rate = in->requested_rate;
            // out/in stream should be both 44.1K serial
            if (!(in->requested_rate % SAMPLING_RATE_11K))
            {
                    // OK
                    in_ajust_rate = in->requested_rate;
            }
            else
            {
                    in_ajust_rate = SAMPLING_RATE_11K * in->requested_rate / SAMPLING_RATE_8K;
                    if (in_ajust_rate > SAMPLING_RATE_44K)
                    {
                            in_ajust_rate = SAMPLING_RATE_44K;
                    }
                    LOGV("out/in stream should be both 44.1K serial, force capture rate: %d", in_ajust_rate);
            }
    
            in->pcm = pcm_open_req(0, PORT_CODEC, PCM_IN, &in->config, in_ajust_rate);
    для последующей обработки и корректировки для совместимости и выбранным в данный момент оборудованием (встроенный SoC или внешний USB DAC), если потребуется, на уровне библиотеки libtinyalsa.so:

    Код:
    for (index = 0; index < size_rate; index++)
        {
            if (pcm_rate[index] == requested_rate)
            {
                break;
            }
        }
     
        if (index == size_rate)
        {
            if (requested_rate < pcm_rate[0])
            {
                config->rate = pcm_rate[0];
            }
            else
            {
                config->rate = pcm_rate[index - 1];
            }
        }
     
        for (cnt = 0; cnt < size_rate; cnt++)
        {
            config->rate = pcm_rate[(index + cnt) % size_rate];
            LOGV("pcm_open_req channels: %d, try rate: %d", config->channels, config->rate);
     
            param_init(&params);
            param_set_mask(&params, SNDRV_PCM_HW_PARAM_FORMAT,
                           pcm_format_to_alsa(config->format));
            param_set_mask(&params, SNDRV_PCM_HW_PARAM_SUBFORMAT,
                           SNDRV_PCM_SUBFORMAT_STD);
            param_set_min(&params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, config->period_size);
            param_set_int(&params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
                          pcm_format_to_bits(config->format));
            param_set_int(&params, SNDRV_PCM_HW_PARAM_FRAME_BITS,
                          pcm_format_to_bits(config->format) * config->channels);
            param_set_int(&params, SNDRV_PCM_HW_PARAM_CHANNELS,
                          config->channels);
            param_set_int(&params, SNDRV_PCM_HW_PARAM_PERIODS, config->period_count);
            param_set_int(&params, SNDRV_PCM_HW_PARAM_RATE, config->rate);
                
            param_dump(&params);
            
            if (flags & PCM_NOIRQ) {
     
                if (!(flags & PCM_MMAP)) {
                    oops(pcm, -EINVAL, "noirq only currently supported with mmap().");
                    goto fail;
                }
     
                params.flags |= SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP;
                pcm->noirq_frames_per_msec = config->rate / 1000;
            }
     
            if (flags & PCM_MMAP)
                param_set_mask(&params, SNDRV_PCM_HW_PARAM_ACCESS,
                           SNDRV_PCM_ACCESS_MMAP_INTERLEAVED);
            else
                param_set_mask(&params, SNDRV_PCM_HW_PARAM_ACCESS,
                           SNDRV_PCM_ACCESS_RW_INTERLEAVED);
     
            if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)) {
                LOGV("cannot set hw params");
            }
            else
            {
                LOGV("pcm_open_req OK config->rate: %d", config->rate);
                break;
            }
        }
     
        if (cnt == size_rate)
        {
            cnt = 0;
            config->channels = 3 - config->channels;
            pcm->config.channels = config->channels;
            
            for (index = 0; index < size_rate; index++)
            {
                if (pcm_rate[index] == requested_rate)
                {
                    break;
                }
            }
     
            if (index == size_rate)
            {
                if (requested_rate < pcm_rate[0])
                {
                    config->rate = pcm_rate[0];
                }
                else
                {
                    config->rate = pcm_rate[index - 1];
                }
            }
     
            for (cnt = 0; cnt < size_rate; cnt++)
            {
                config->rate = pcm_rate[(index + cnt) % size_rate];
                LOGV("pcm_open_req channels: %d, try rate: %d", config->channels, config->rate);



    Полезные темы:

  2. # 1+

    Если Вы впервые на нашем Форуме:

    1. Обратите внимание на список полезных тем в первом сообщении.
    2. Термины и наиболее популярные модели в сообщениях подсвечиваются быстрыми подсказками и ссылками на соответствующие статьи в МагВикипедии и Каталоге.
    3. Для изучения Форума не обязательно регистрироваться - практически весь профильный контент, включая файлы, картинки и видео, открыты для гостей.
    С наилучшими пожеланиями,
    Администрация Форума автозвука Магнитола


     

  3. #2
    Активист Установщик
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Репутация: 33907 Аватар для MSMaster
    Регистрация
    10.05.2008
    Город/село
    Санкт-Петербург
    Сообщений
    237
    Спасибо (Раздал)
    200
    Спасибо (Получил)
    275
    Более 5 лет на форуме

    Re: Android 24 bit/96 kHz

    А,с помощью Нейтрона,не пробовали выводить хай-резы ?


  4. #3
    Супер-Модератор Начальник кадров
    Репутация
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Репутация: 2809633 Аватар для Хоттабыч
    Регистрация
    26.09.2008
    Город/село
    заУРАвЛОМ
    Сообщений
    22,004
    Спасибо (Раздал)
    52150
    Спасибо (Получил)
    35310
    Более 5 лет на форуме

    Re: Android 24 bit/96 kHz

    Цитата Сообщение от HoSStiA Посмотреть сообщение
    Но на 24 битах ждет разочарование:
    вообще надо рассматривать до 20, дальше это теоретически для самоуспокоения. Шумы усилителя громче. При такой частоте можно услышать как идут электронные часы
    Немного хочу тоже въехать в эту тему : если я правильно понимаю, то использую спидиф мы обходим обработку звука самим процессором со встроенным кодеком ? Так ? И тогда имея усилитель со входом спидиф получаем отличный звук ? А насчет фильтров и тембров ? Где они будут или должны быть?


  5. #4
    маХЕРовый Начальник смены Array Репутация: лучше не знать Аватар для Rover
    Регистрация
    05.06.2006
    Город/село
    г. Жуковский
    Сообщений
    1,795
    Спасибо (Раздал)
    785
    Спасибо (Получил)
    4134
    Ветеран форума

    Re: Android 24 bit/96 kHz

    Продолжим совместное исследование ограничений.
    При запуске воспроизведение 16-hpt.wav из андроид-приложений ограничение накладывается, невзирая на переопределение частоты дискретизации
    D/audio_hw_primary( 85): start_output_stream: card:1, port:0, rate:48000
    получаем ограничение на уровне Android
    root@android:/ # cat /proc/asound/card1/stream0
    cat /proc/asound/card1/stream0
    C-Media Electronics Inc. USB Audio Device at usb-sw-ohci-1.5, full speed : USB A
    udio


    Playback:
    Status: Running
    Interface = 1
    Altset = 1
    URBs = 3 [ 8 8 8 ]
    Packet Size = 200
    Momentary freq = 44100 Hz (0x2c.199a)
    Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 1 OUT (ADAPTIVE)
    Rates: 44100, 48000
    С другой стороны,
    Код:
    root@android:/proc/asound/card1 # alsa_aplay -v -Dhw:1,0 /sdcard/Music/16-hpt.wa
    v
     /sdcard/Music/16-hpt.wav                                                     <
    Playing WAVE '/sdcard/Music/16-hpt.wav' : Signed 16 bit Little Endian, Rate 4800
    0 Hz, Stereo
    Hardware PCM card 1 'USB Audio Device' device 0 subdevice 0
    Its setup is:
      stream       : PLAYBACK
      access       : RW_INTERLEAVED
      format       : S16_LE
      subformat    : STD
      channels     : 2
      rate         : 48000
      exact rate   : 48000 (48000/1)
      msbits       : 16
      buffer_size  : 24000
      period_size  : 6000
      period_time  : 125000
      tstamp_mode  : NONE
      period_step  : 1
      avail_min    : 6000
      period_event : 0
      start_threshold  : 24000
      stop_threshold   : 24000
      silence_threshold: 0
      silence_size : 0
      boundary     : 1572864000
      appl_ptr     : 0
      hw_ptr       : 0
    дает искомый результат
    Код:
    root@android:/ # cat /proc/asound/card1/stream0
    cat /proc/asound/card1/stream0
    C-Media Electronics Inc. USB Audio Device at usb-sw-ohci-1.5, full speed : USB A
    udio
    
    
    Playback:
      Status: Running
        Interface = 1
        Altset = 1
        URBs = 3 [ 8 8 8 ]
        Packet Size = 200
        Momentary freq = 48000 Hz (0x30.0000)
      Interface 1
        Altset 1
        Format: S16_LE
        Channels: 2
        Endpoint: 1 OUT (ADAPTIVE)
        Rates: 44100, 48000


    ---------- Сообщение добавлено 19.01.2014 в 20:10 ----------

    Цитата Сообщение от MSMaster Посмотреть сообщение
    А,с помощью Нейтрона,не пробовали выводить хай-резы ?
    Попробовали, и не только его. Андроид настроен на выхлоп 16/48, но любой плеер, проигрывая файл с частотой дескритизации 48 кГц ПРОГРАМНО даунсемплит его в 44.1 кГц, и такую частоту мы получаем на выходе, хотя в плеере видим частоту 48 кГц.
    Бум думать, как победить.


    Цитата Сообщение от хоттабыч Посмотреть сообщение
    Немного хочу тоже въехать в эту тему : если я правильно понимаю, то использую спидиф мы обходим обработку звука самим процессором со встроенным кодеком ? Так ? И тогда имея усилитель со входом спидиф получаем отличный звук ? А насчет фильтров и тембров ? Где они будут или должны быть?
    Выводя цифру из Андроида, мы в первую очередь исключаем работу встроенного поганого ЦАПа, а обработку поручаем внешнему устройству. Подключили вот это : http://shop.rznprb.com/index.php?rou...&path=20_26_66 получили практически готовую систему.


  6. #5
    Ушел в ЛАС Технический директор Array Репутация: лучше не знать Аватар для HoSStiA
    Регистрация
    11.01.2004
    Город/село
    Столиця
    Сообщений
    13,040
    Спасибо (Раздал)
    10629
    Спасибо (Получил)
    14167
    Автор
    Ветеран форума
    Цитата Сообщение от MSMaster Посмотреть сообщение
    А,с помощью Нейтрона,не пробовали выводить хай-резы ?
    Ставили Нетрон, но сходу не нашли там соответствующих настроек. По умолчанию все равно происходит downsampling до 16/44.1, как и с другими плеерами.

    ---------- Сообщение добавлено 20.01.2014 в 12:13 ----------

    Убираем непонятно зачем оставленный ранее ресемплер из audio.primary.exDroid.so
    Заменяем "неправильную" команду на правильную.

    Код:
    //    out->pcm = pcm_open_req(card, port, PCM_OUT | PCM_MMAP | PCM_NOIRQ, &out->config, DEFAULT_OUT_SAMPLING_RATE);
        out->pcm = pcm_open_req(card, port, PCM_OUT | PCM_MMAP | PCM_NOIRQ, &out->config, out->config.rate);
    
        if (!pcm_is_ready(out->pcm)) {
            LOGE("cannot open pcm_out driver: %s", pcm_get_error(out->pcm));
            pcm_close(out->pcm);
            adev->active_output = NULL;
            return -ENOMEM;
        }
    
        if (adev->echo_reference != NULL)
            out->echo_reference = adev->echo_reference;
    /*
            if (DEFAULT_OUT_SAMPLING_RATE != out->config.rate)
            {
                    ret = create_resampler(DEFAULT_OUT_SAMPLING_RATE,
                                                               out->config.rate,
                                                               2,
                                                               RESAMPLER_QUALITY_DEFAULT,
                                                               NULL,
                                                               &out->resampler);
                    if (ret != 0)
                    {
                            LOGE("create out resampler failed, %d -> %d", DEFAULT_OUT_SAMPLING_RATE, out->config.rate);
                            return ret;
                    }
    
                    LOGV("create out resampler OK, %d -> %d", DEFAULT_OUT_SAMPLING_RATE, out->config.rate);
            }
            else
            {
                    LOGV("do not use out resampler");
            }
    
            if (out->resampler)
            {
                out->resampler->reset(out->resampler);
            }
    */


    ---------- Сообщение добавлено 20.01.2014 в 15:03 ----------

    Штатный плеер, пока "в точку":

    Код:
    I/InputReader(  164): Device added: id=7, name='C-Media Electronics Inc. USB Advanced Audio Device', sources=0x00000101
    D/audio_hw_primary(   85): start_output_stream: card:1, port:0, rate:48000
    
    root@android:/proc/asound/card1 # cat stream0                                                                                                                                    
    C-Media Electronics Inc. USB Advanced Audio Device at usb-sw_hcd_host0-1, full  : USB Audio
    
    Playback:
      Status: Running
        Interface = 1
        Altset = 1
        URBs = 3 [ 8 8 8 ]
        Packet Size = 200
        Momentary freq = 48000 Hz (0x30.0000)
      Interface 1
        Altset 1
        Format: S16_LE
        Channels: 2
        Endpoint: 1 OUT (ADAPTIVE)
        Rates: 8000, 16000, 44100, 48000
    Проверяем работу в режиме 16bit/48кГц

    Код:
    root@android:/proc/asound/card1 # cat stream0                                                                                                  
    Creative Technology Ltd SB Audigy 2 NX at usb-sw_hcd_host0-1, high speed : USB Audio
      Status: Running
        Interface = 1
        Altset = 3
        URBs = 3 [ 8 8 8 ]
        Packet Size = 196
        Momentary freq = 48051 Hz (0x6.01a2)
        Feedback Format = 16.16
    и 24bit/48кГц
    Код:
    Playback:
      Status: Running
        Interface = 1
        Altset = 4
        URBs = 3 [ 8 8 8 ]
        Packet Size = 294
        Momentary freq = 48050 Hz (0x6.019b)
        Feedback Format = 16.16
    Соответственно, и протокол как бы выдержан
    Interface 1
    Altset 3
    Format: S16_LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 48000
    Data packet interval: 1000 us
    Interface 1
    Altset 4
    Format: S24_3LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 48000
    Data packet interval: 1000 us


    Вложения

  7. #6
    маХЕРовый Начальник смены Array Репутация: лучше не знать Аватар для Rover
    Регистрация
    05.06.2006
    Город/село
    г. Жуковский
    Сообщений
    1,795
    Спасибо (Раздал)
    785
    Спасибо (Получил)
    4134
    Ветеран форума

    Re: Android 24 bit/96 kHz

    Формат 24/96 это здорово. А вот следующая ступень - асинхронная передача (XMOS, cm6631) её возможно к Андрюше прикрутить?
    Вот реальный пример - вот это девайс http://www.aliexpress.com/snapshot/6142025743.html ,Нексус 7 с андроид 4.2 его в упор не видит, а возможно сделать так, шоб увидел, а, Сань?


  8. #7
    Активист Установщик
    Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Репутация: 33907 Аватар для MSMaster
    Регистрация
    10.05.2008
    Город/село
    Санкт-Петербург
    Сообщений
    237
    Спасибо (Раздал)
    200
    Спасибо (Получил)
    275
    Более 5 лет на форуме

    Re: Android 24 bit/96 kHz

    Может быть попробовать через прогу USB AUDIO PRO выводить, она многие внешние ЗК видит.
    Я через нее вывожу 24/48 , качество неплохое.


  9. #8
    Ушел в ЛАС Технический директор Array Репутация: лучше не знать Аватар для HoSStiA
    Регистрация
    11.01.2004
    Город/село
    Столиця
    Сообщений
    13,040
    Спасибо (Раздал)
    10629
    Спасибо (Получил)
    14167
    Автор
    Ветеран форума

    Re: Android 24 bit/96 kHz

    Цитата Сообщение от Rover Посмотреть сообщение
    Формат 24/96 это здорово. А вот следующая ступень - асинхронная передача (XMOS, cm6631) её возможно к Андрюше прикрутить?
    Вот реальный пример - вот это девайс http://www.aliexpress.com/snapshot/6142025743.html ,Нексус 7 с андроид 4.2 его в упор не видит, а возможно сделать так, шоб увидел, а, Сань?
    Так же, как и в случаях с любым нестандартным оборудованием - искать или кодить драйвера под текущее ядро. И настраивать существующие до уровня совместимости.

    На Minix'ах мы столкнулись с тем, что плата с асинхронной передачей заработала только при подключении к OTG-порту, в драйвер которого был внедрен по всей видимости "костыль" от Raspberry Pi. Но это спасает только на 116A, на 116i вса равно начинаются лаги через некоторое время. И вообще USB для audio - это зло. Но так как до I2C/I2S у разработчиков "высоких концов" руки могут так и не добраться, при доступе к прошивке аналогичных устройств нужно допиливать USB-драйвера ядра. Либо удачно встраивать чужие наработки на этом поле.


  10. #9
    Ушел в ЛАС Технический директор Array Репутация: лучше не знать Аватар для HoSStiA
    Регистрация
    11.01.2004
    Город/село
    Столиця
    Сообщений
    13,040
    Спасибо (Раздал)
    10629
    Спасибо (Получил)
    14167
    Автор
    Ветеран форума

    Re: Android 24 bit/96 kHz

    Сопряжение неподдерживаемых устройств с Android лучше всего начинать с проверки их работоспособности под Ubuntu с последней версией ядра (сейчас 3.13.х). Если заустилось под ней, то после танцев с бубном и ядром, Андроид хотя бы его начнет распознавать.


  11. #10
    маХЕРовый Начальник смены Array Репутация: лучше не знать Аватар для Rover
    Регистрация
    05.06.2006
    Город/село
    г. Жуковский
    Сообщений
    1,795
    Спасибо (Раздал)
    785
    Спасибо (Получил)
    4134
    Ветеран форума

    Re: Android 24 bit/96 kHz

    Поженил я Nexus 7 с этим девайсом:

    Название: CM6631A-USB-to-Coaxial-and-Optical-Fiber-SPDIF-I2S-Converter-24bit-192kHz-LJM.jpg
Просмотров: 2161

Размер: 7.0 Кб
    http://ru.aliexpress.com/item/CM6631...otionVersion=1 (как? сИкрет ).
    Если Фсё успею допилить (в основном управление на руле) в Серпухове 09.08.14 буду выступать на планшете.
    Программа "прощай CD ROM" в действии !!!


Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
  cc by-nc-sa