На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Программирование звука"
0) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с записью, обработкой, воспроизведением звука. Перед созданием темы подумайте, не будет ли она уместнее в разделах Разработка и тестирование программ, Наши исходники, а особенно Разовые заказы и подработки
1) На Раздел распространяются все Правила форума.Огромная просьба с ними внимательно ознакомиться.
2) Запрещается давать бессмысленные ответы вроде: "Снеси Мастдай", "ХП рулит", "Поставь Линукс" и т.д.
3) Запрещается создавать темы, в которых Вы намереваетесь получить ссылку на кряки, серийники и т.п. Также запрещено любое обсуждение p2p (peer-to-peer) сетей (BitTorrent, eDonkey и т.д.).
4) Реклама всякого рода пресекается беспощадно.
5) Используйте тэг [CODE] для выделения кода программы (непременно с указанием языка программирования - выбрать из списка. В противном случае бессмысленно!). Уважайте тех, кто будет читать ваш код!
6) Если решение вашей проблемы найдено, то не забываем помечать тему специальной функцией "Вопрос решён". Вам всего лишь требуется при написании последнего ответа поставить одну единственную галочку прямо над формой ответа.
7) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе

8) Если не прикрепляются/не скачиваются файлы, читаем Не прикрепляется / не скачивается файл. Любые обсуждения в данном разделе проблем с приложением файлов считаются оффтопиком! Со всеми вытекающими.

9) NEW! Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно. Попытки накрутки количества тематических сообщений за счёт поднятия древних неактуальных тем ("некрофилия") будут наказываться по велению левой пятки модераторского состава (см. пп.12, 13 Правил)



Нарушение Правил может повлечь наказание со стороны модераторов.



user posted imageFAQ Раздела user posted imageПоиск в Разделе user posted imageMSDN Library Online | Ваше мнение о модераторах: user posted imageBarazuk user posted imageRikkie
Модераторы: barazuk
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Работа с BassAsio
    Попробовал использовать BassAsio со своей Motu Traveler. Сделал простую программу для установки различной частоты дискретизации:
    ExpandedWrap disabled
      #include <iostream>
      #include "bassasio.h"
       
      #pragma comment(lib, "bassasio.lib")
       
      void ErrorMes(char* sMes, int Res)
      {
        std::cout << "\n" << std::cout << sMes << Res << "\n\n";
        system("pause");
        exit(EXIT_FAILURE);   // EXIT_SUCCESS, EXIT_FAILURE
      }
       
      void TestAsio(void)
      {
        std::cout << "\n-------------- Определение поддерживаемой частоты дискретизации ------------\n";
        int nSamplesPerSec[] = {44100, 48000, 64000, 88200, 96000, 176400, 192000};
        if(FALSE == BASS_ASIO_Init(0, BASS_ASIO_THREAD))
          ErrorMes("Не удалось инициализировать устройство (или драйвер) командой BASS_ASIO_Init. Ошибка: ", BASS_ASIO_ErrorGetCode());
        if(FALSE == BASS_ASIO_SetDevice(0))
          ErrorMes("Не удалось выбрать устройство командой BASS_ASIO_SetDevice. Ошибка: ", BASS_ASIO_ErrorGetCode());
          if(FALSE == BASS_ASIO_ChannelReset(TRUE,-1,BASS_ASIO_RESET_ENABLE))
          ErrorMes("Не удалось сбросить все каналы командой BASS_ASIO_ChannelReset. Ошибка: ", BASS_ASIO_ErrorGetCode());
        if(FALSE == BASS_ASIO_ChannelReset(TRUE,-1,BASS_ASIO_RESET_RATE))
          ErrorMes("Не удалось установить частоту дискретизации устройства командой BASS_ASIO_ChannelReset c BASS_ASIO_RESET_RATE. Ошибка: ", BASS_ASIO_ErrorGetCode());
        for(int i = 0; i < sizeof(nSamplesPerSec)/sizeof(nSamplesPerSec[0]); i++)
        {
          if(FALSE == BASS_ASIO_SetRate((double) nSamplesPerSec[i]))
          {
            std::cout << "\n!!! Ошибка при установке частоты дискретизации " << nSamplesPerSec[i] << std::endl << std::endl;
            continue;
          }
          std::cout << "\n+++++++++++++++ Установлена частота дискретизация: " << BASS_ASIO_GetRate() << " +++++++++++++++\n\n";
          system("pause");
        }
        BASS_ASIO_Free();
      }
       
      int main(int argc, char* argv[])
      {
        setlocale(LC_ALL, "");
        TestAsio();
        system("pause");
      }
    BASS_ASIO_GetRate() рапортует, что частоты устанавливаются успешно. Однако на устройстве есть индикаторы, показывающие текущую частоту дискретизации. Исходя из их показаний частоты дискретизации не переключаются (если частота установлена на 192000, то индикатор частоты дискретизации так и стоит на 192000 и не переключается при работе программы, если начальная частота 44100, то устанавливается 48000 и далее индикатор замирает на этой частоте). Если выбирать частоту дискретизации стандартной программой Motu Audio Console, то при установке любой из допустимых частот (44100, 48000, 88200, 96000, 176400, 192000) и нажатия кнопки ОК индикатор сразу же переключается на установленную в этой программе частоту.
    Подскажите, пожалуйста, что я делаю неправильно. Проект прикрепил.
    Прикреплённый файлПрикреплённый файлTestAsio.zip (20,09 Кбайт, скачиваний: 55)
      tuchin, попробуйте, пожалуйста, тестовую программу на своей Дельте
        Я попробовал. Сообщение об успешной установке: 44100, 48000, 88200, 96000. Ошибки: 64000, 19200. К сожалению, на Delta 66 нет индикаторов, поэтому проверить, правильно ли устанавливается частота дискретизации, можно лишь записав тестовый аудио сигнал в файлы при разных частотах и загрузив их в аудиоредактор. Если Вы дополните свою тестовую программу возможностью записи в файлы при разных частотах хотя бы по одному каналу, обещаю проверить, как только будет время.
          Запись на Дельте прекрасно работает, все команды установки частоты дискретизации отрабатываются без проблем. Видимо, Моту имеет какие-то особенности, в которых нужно разбираться. Если разберетесь, сообщите, пожалуйста, в чем было дело. Интересно, из-за чего могут быть такие проблемы.
            Цитата
            BASS_ASIO_GetRate() рапортует, что частоты устанавливаются успешно. Однако на устройстве есть индикаторы, показывающие текущую частоту дискретизации. Исходя из их показаний частоты дискретизации не переключаются

            а если после BASS_ASIO_SetRate вызвать BASS_ASIO_ControlPanel и глянуть там, установилась ли заданная частота.
            Человек человека понять не может.
              Я попробовал, не устанавливается. Пробовал и вызывать Start. Если устанавливать частоту через панель и ту же частоту использовать в программе, то программа работает нормально: файлы записываются правильно.Если выбранная в программе частота не соответствует текущей частоте устройства, получаются файлы с нулевым размером
                Если устанавливать частоту через панель, то нет смысла устанавливать частоту в программе. Она уже и так установлена.
                Цитата
                BASS_ASIO_GetRate() рапортует, что частоты устанавливаются успешно. Однако на устройстве есть индикаторы, показывающие текущую частоту дискретизации. Исходя из их показаний частоты дискретизации не переключаются

                Глюк.
                Ваш кэп.


                Никто не запрещает уставливать частоту через контрол панель.
                Человек человека понять не может.
                  А что такое "Ваш кэп"?
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,0925 ]   [ 19 queries used ]   [ Generated: 22.09.17, 13:26 GMT ]