Форум автозвука и установки музыки в автомобиль
Показано с 1 по 10 из 2599

USB DAC и USB Audio для Android

Древовидный режим

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

    Re: USB DAC и USB Audio для Android

    Цитата Сообщение от aluver Посмотреть сообщение
    На каком рокчипе сейчас это пробуешь?
    RK3288. Если не подпалю плату, то сведу всю информацию в отдельной теме. Ядро 3.10.х перспективнее в плане подключения различной периферии, и как основа CarPC сама платформа видится оптимальной.

    Цитата Сообщение от aluver Посмотреть сообщение
    Насильное апсемплирование до 96кГц не пробовал?
    Попробовал "насильно" проиграть оригинальные 24bit/96kHz через USB-карточку:

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


    Playing WAVE '194435__psuess__tanbura-96khz24bit.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
    Hardware PCM card 3 'SB Audigy 2 NX' device 0 subdevice 0
    Its setup is:
    stream : PLAYBACK
    access : RW_INTERLEAVED
    format : S24_3LE
    subformat : STD
    channels : 2
    rate : 96000
    exact rate : 96000 (96000/1)
    msbits : 24
    buffer_size : 48000
    period_size : 12000
    period_time : 125000
    tstamp_mode : NONE
    period_step : 1
    avail_min : 12000
    period_event : 0
    start_threshold : 48000
    stop_threshold : 48000
    silence_threshold: 0
    silence_size : 0
    boundary : 1572864000
    appl_ptr : 0
    hw_ptr : 0

    Следовательно, можно доточить и всеобщий апсемплинг, только смысла делать это только ради тонкой регулировки громкости не вижу - практичнее сразу 5.1 разлочить, и использовать вместо домашнего кинотеатра. Благо можно HDD по SATA подцеплять

    Цитата Сообщение от aluver Посмотреть сообщение
    Кодом предусмотрено такое? Или только даунсемплит?
    ALSA может, в AudioHAL надо прописывать как разрешенную для требуемого типа устройств:

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


    Код:
    AudioStreamOut *
    AudioHardwareALSA::openOutputStream(uint32_t devices,
                                        int *format,
                                        uint32_t *channels,
                                        uint32_t *sampleRate,
                                        status_t *status)
    {
        LOGD("openOutputStream called for devices: 0x%08x format %d channels %d sampleRate %d ", devices,
    		*format, *channels, *sampleRate);
        if(mAudioState ==1){
            if(mOutStream){
    			mOutStream->standby();
            }
    		if(devices == AudioSystem::DEVICE_OUT_ANLG_DOCK_HEADSET){
    			char value[PROPERTY_VALUE_MAX] = "";
    			property_get("media.cfg.audio.bypass", value, "-1");
    			if(memcmp(value, "true", 4) == 0){
    				mDirectMode = 1;
    				usleep(3000 * 1000);
    			}
    		} else if(devices == AudioSystem::DEVICE_OUT_AUX_DIGITAL){
    			char value[PROPERTY_VALUE_MAX] = "";
    			property_get("media.cfg.audio.mul", value, "-1");
    			if(memcmp(value, "true", 4) == 0){
    				mDirectMode = 0;
    				usleep(3000 * 1000);
    			}else{
    				property_get("media.cfg.audio.bypass", value, "-1");
    				if(memcmp(value, "true", 4) == 0){
    					mDirectMode = 1;
    					usleep(3000 * 1000);
    				}
    			}
    		}
        }
        status_t err = BAD_VALUE;
        AudioStreamOutALSA *out = 0;
        uint32_t uChannels = audio_channel_out_count_from_mask(*channels);
        if(uChannels < 2)
            uChannels = 2;
    
        if (devices & (devices - 1)) {
            if (status) *status = err;
            LOGD("openOutputStream called with bad devices");
            return out;
        }
    
        // Find the appropriate alsa device
        for(ALSAHandleList::iterator it = mDeviceList.begin();
            it != mDeviceList.end(); ++it)
            if (it->devices & devices) {
    			if(devices == AudioSystem::DEVICE_OUT_ANLG_DOCK_HEADSET){
    				char value[PROPERTY_VALUE_MAX] = "";
    				property_get("media.cfg.audio.bypass", value, "-1");
    				//samplerate passthrough
    				//current only accecpt 44100 or 48000				
    				if(memcmp(value, "true", 4) == 0){		
    					if(*sampleRate==44100 || *sampleRate==48000)
    						it->sampleRate = *sampleRate;
    					else
    						LOGE("direct sampleRate %d unsupported at the time", *sampleRate);
    					mDirectMode=1;
    				}
    			} else if(devices == AudioSystem::DEVICE_OUT_AUX_DIGITAL){
                    char value[PROPERTY_VALUE_MAX] = "";
                    property_get("media.cfg.audio.mul", value, "-1");
                    if(memcmp(value, "true", 4) == 0){		
                        if(*sampleRate==44100 || *sampleRate==48000){
                            it->sampleRate = *sampleRate;
                        }else{
                            LOGE("hdmi 5.1 sampleRate %d unsupported at the time", *sampleRate);
                            it->sampleRate = 44100;
                        }
                        mDirectMode=0;
                    }else {
    	                property_get("media.cfg.audio.bypass", value, "-1");
    	                if(memcmp(value, "true", 4) == 0){		
                            if(*sampleRate==44100 || *sampleRate==48000 || *sampleRate==192000){
                                it->sampleRate = *sampleRate;
                            }else{
                                LOGE("hdmi passthrough sampleRate %d unsupported at the time", *sampleRate);
                                it->sampleRate = 44100;
                            }
                            mDirectMode=1;
                        }
                    }
                } else {
                    it->sampleRate = 44100;
                }
    
                it->channels = uChannels;
    
                int flag=HW_PARAMS_FLAG_LPCM;
                if(mDirectMode)
                    flag=HW_PARAMS_FLAG_NLPCM;
                err = mALSADevice->open(&(*it), devices, mode(), flag);
                if (err) break;
                out = new AudioStreamOutALSA(this, &(*it));
    			out->mCurDev = devices;
    			mOutStream = out;
                err = out->set(format, channels, sampleRate);
                break;
            }
    
        if (status) *status = err;
        return out;
    }

    Цитата Сообщение от aluver Посмотреть сообщение
    вот и посмотрим, насколько там все плохо очень интересно, без субьективной составляющей.
    Для RK-SPDIF уже на 48000, похоже, все плохо, и это видно даже невооруженным взглядом:
    Нажмите на изображение для увеличения
Название: Снимок экрана от 2015-12-06 21-31-56.png
Просмотров: 0
Размер:	85.2 Кб
ID:	907132Нажмите на изображение для увеличения
Название: Снимок экрана от 2015-12-06 21-10-18.png
Просмотров: 0
Размер:	91.6 Кб
ID:	907134
    Верхняя стереодорожка - оригинал, нижняя - воспроизведенный RK и записанный внешней звуковой картой.

    Вложения

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

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

Ваши права

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