я хотел бы сделать следующее: предположив, что 10 RDL выполняют 10 различных хранимых процедур, назначьте каждой хранимой процедуре скрытый параметр. давайте назовем это @report_number
(например). Поэтому для первого отчета в хранимой процедуре добавьте предложение where для включения and @report_number = 1
, что должно технически остановить хранимую процедуру, как только она увидит, что передано другое число (скажем, 2 для отчета 2) ... и так далее, и так далее ..
@report_number назначается в отдельном наборе данных.
например,
report1 - значение = 1
report2 - значение = 2
.
.
.
report10 - значение = 10
, поэтому, когда пользователь запускает отчет 1, значение 1 для @report_number передается в этот набор данных. Остальные наборы данных не должны запускать связанную с ним процедуру как они не будут иметь ожидаемого значения в предложении where.
Надеюсь, что это имело смысл.
Марсий был бы отличным выбором для этого, он создан именно для такого рода задач.
Для настройки инструмента вам нужно иметь алгоритм, который оценивает фундаментальную частота (F0) звука. Для этого существует ряд алгоритмов, один из самых новых и лучших. - это алгоритм YIN, разработанный Аленом де Шевенем. Я недавно добавил алгоритм ИНЬ в Marsyas, и использовать его очень просто.
Вот базовый код, который вы бы использовали в Marsyas:
MarSystemManager mng; // A series to contain everything MarSystem* net = mng.create("Series", "series"); // Process the data from the SoundFileSource with AubioYin net->addMarSystem(mng.create("SoundFileSource", "src")); net->addMarSystem(mng.create("ShiftInput", "si")); net->addMarSystem(mng.create("AubioYin", "yin")); net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName); while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) { net->tick(); realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>(); cout << r(0,0) << endl; }
Этот код сначала создает объект Series, к которому мы будем добавлять компоненты. В серии каждый из компонентов получает последовательно выходные данные предыдущей системы MarSystem. Затем мы добавляем SoundFileSource, который вы можете кормить в файле .wav или .mp3 в. Затем мы добавляем объект ShiftInput, который выводит перекрывающиеся фрагменты звука, которые затем передаются в объект AubioYin, который оценивает основную частоту этого фрагмента звука.
Затем мы сообщаем SoundFileSource, что мы хотим прочитать файл вAudioFileName.
Оператор while затем повторяется до тех пор, пока SoundFileSource не исчерпается. данные. Внутри пока В цикле мы берем данные, обработанные сетью, и выводим элемент (0,0), который является оценка основной частоты.
Это еще проще, если вы используете привязки Python для Marsyas.
Это руководство должно помочь. Не используйте ALSA для своего приложения. Используйте высокоуровневый API. Если Вы решаете, что требуется использовать ДЖЕКА, http://jackaudio.org/applications имеет три инструментальных тюнера, которые можно использовать в качестве примера кода.
ALSA является видом стандарта по умолчанию для Linux теперь на основании драйверов ядра, включаемых в ядро и обесцениваемое OSS. Однако существуют альтернативы пространству пользователя ALSA, как разъем, который, кажется, нацелен на приложения типа профессионала низкой задержки. Это - API, кажется, имеет более хороший API, хотя я не использовал его, мое кратковременное воздействие API ALSA заставило бы меня думать, что почти что-либо было бы лучше.
Смелость включает функцию частотной характеристики и имеет встроенные фильтры FFT.
http://clam-project.org/ CLAM - это полноценная программная среда для исследований и разработки приложений в области аудио и музыки. Он предлагает концептуальную модель, а также инструменты для анализа, синтеза и обработки аудиосигналов.
У них отличный API, красивый графический интерфейс и несколько готовых приложений, в которых вы можете увидеть все.