На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (4) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
> Запись потока с линейного входа , Разделить поток линейного входа на 2 разных в первом только левое моно, а во втором только правое моно
    Цитата
    Например мне нужно чтобы это стереопоток разбивался, записывался в разные файлы

    Прикреплённый файлПрикреплённый файлКопия_RecordTest.rar (3.54 Кбайт, скачиваний: 405)
    За основу взят пример из Bass. Захват аудио производится в формате 44100 стерео 16 бит, а на диск пишется сразу 3 файла: стерео, и отдельно левый/правый каналы. Файлы моно имеют в имени приставку L/R.

    Добавлено
    Цитата
    при этом чтобы он соазу не выводился на выход, а была возможность какой-то из разбитых ранее потоков отдельно в случае необходимости выводить на выходе...

    Переведите.
    :unsure:
    Сообщение отредактировано: Prince -
      Цитата
      Я пожалуй соглашусь с тем, что ты не разобравшись, что я хотел показать, начал гнать пургу.

      Да, таки ты не подумав, начал гнать пургу, и не можешь в этом признаться. :rolleyes:
      Цитата
      Правда "светочи" вцепились в вывод, "аргументируя" необходимостью ввода, но сознательно упуская одну деталь - структура одинакова как для ввода, так и для вывода.

      Светочи вцепились в то, что ты выдал ерунду, и как обычно, уперто твердишь, что ты прав, просто тебя неправильно поняли. :rolleyes:
      Сообщение отредактировано: Prince -
        Попробую перевести... я подключаю телефон, где играет стерео, на линейный вход, на той же звуковухе подключаю наушники на линейный выход и слышу музыку... а нужно чтобы ее по умолчанию слышно не было, а было слышно только то, что я сам решу выводить... ну к примеру один из входных потоков...
        И еще один вопрос, я запускаю на этом же компе плеер и то, что играет на плеере тоже попадает на запись... накладывается на то, что приходит с линейного входа, как этого избежать?
          Цитата sandist @
          как этого избежать?

          Я же тебе говорю - микшер. Погаси в микшере выходной канал и ты ничего в наушниках не услышишь. Аналогично и с выбором входа для звука. :D
          Цитата Prince @
          и как обычно, уперто твердишь

          Ну если светочи непонятливые то как же не твердить то? :-? Ведь белое не станет черным, как бы этого "светочам" не хотелось... :D
          Цитата Prince @
          просто тебя неправильно поняли. :rolleyes:

          Уже теплее, продолжай. :rolleyes: Я зачту слив. ;)
            Цитата
            Я зачту слив.

            Зачти его себе, я тебе его уже зачёл на прошлой странице. :rolleyes:

            Добавлено
            Цитата
            Попробую перевести... я подключаю телефон, где играет стерео, на линейный вход, на той же звуковухе подключаю наушники на линейный выход и слышу музыку...а нужно чтобы ее по умолчанию слышно не было

            Выключить в микшере прослушивание линии линейного входа.
            Цитата
            а было слышно только то, что я сам решу выводить... ну к примеру один из входных потоков...

            Можно сделать програмно, но с задержкой относительно входящего аудио-сигнала.
            Цитата
            И еще один вопрос, я запускаю на этом же компе плеер и то, что играет на плеере тоже попадает на запись... накладывается на то, что приходит с линейного входа, как этого избежать?

            Выключить в микшере запись с линии стерео-выхода или выключить в микшере прослушивание линии линейного входа. Я через форум не могу поковыряться в настройках вашего микшера, а там могут быть варианты.
            Сообщение отредактировано: Prince -
              Спасибо большое!!! разобрался... но чувствую еще этих вопросов много будет :)
                Ошибку допустил в function RecordingCallback:
                ExpandedWrap disabled
                  Form1.WaveStreamL.Write(buffer_L^, length div 2);
                    Form1.WaveStreamR.Write(buffer_L^, length div 2);

                Во второй строчке должен быть buffer_R^
                В TForm1.FormClose добавить
                ExpandedWrap disabled
                    if BASS_ChannelIsActive(rchan) <> 0 then
                    brecord.Click;

                иначе, если закрыть окно во время записи, ресурсы не особождаются корректно.
                Обновил архив.
                Сообщение отредактировано: Prince -
                  Подскажите пожалуйста еще... насчет того как проигрывать через bass.dll много чего написано, а вот с записью куда скуднее..
                  Вы подсказали мне как разделить поток и записывать их в файлы.. а как разбить поток на 2, так, чтобы к ним можно было применять эффекты, ну вернее громкость, эквалайзер. Например я записываю звук, а он от источника очень громкий... нужно эквалайзером уменьшить
                    Цитата
                    Вы подсказали мне как разделить поток и записывать их в файлы.. а как разбить поток на 2

                    Вопрос бессмысленный. Разбить, разделить - масло масляное.
                    У вас есть кусок памяти(буфер, массив, обзовите как угодно), в котором отсчёты каналов располагаются так:

                    Буфер LRLRLRLR...LR

                    Каждый отсчёт - 16 бит(2 байтовое число со знаком). Читайте нужные вам отсчёты и обрабатывайте как вам угодно.
                    В примере, для того, чтобы записывать в файлы отдельно левый/правый каналы, выделяются дополнительно 2 буфера, куда раскидываются отсчёты из стерео буфера.

                    Буфер_L LLLL...L


                    Буфер_R RRRR...R

                    Потом все три буфера сливаются на диск, в разные файлы.

                    Цитата
                    Например я записываю звук, а он от источника очень громкий...

                    "Регулятор покрути". На источнике, чтобы согласовать по уровню выход источника и вход звуковой карты; и в микшере звуковой карты, чтобы выставить требуемый уровень записываемого сигнала.
                    Цитата
                    а как разбить поток на 2, так, чтобы к ним можно было применять эффекты, ну вернее громкость, эквалайзер

                    Допустим, применили. А дальше?
                    Сообщение отредактировано: Prince -
                      Как реализовано в примере я понял, но по условию у меня может быть с левого источника громкий звук, а с правого тихий, мне нужно уменьшить к примеру левый... то есть подается стерео звук, но на левом канале нужно уменьшить, на источнике покрутить не вариант, в микшере как я уменьшу именно для левого?
                      А нельзя получить данные, их преобразовать и уже потом записывать?
                      Времени совсем мало, если можно конкретный пример...
                      Спасибо
                        Цитата sandist @
                        в микшере как я уменьшу именно для левого?

                        Баланс при воспроизведении не прокатит?
                          ExpandedWrap disabled
                              for i:=0 to length div 4-1 do
                              Begin
                             psample^:=round(psample^*level_L);
                              psample_L^:=psample^;
                              inc(psample);
                              inc(psample_L);
                              psample^:=round(psample^*level_R);
                              psample_R^:=psample^;
                              inc(psample);
                              inc(psample_R);
                              end;


                          level_L/R - коэффициенты, от 0(полная тишина) до 1.0(уровень сигнала не меняется). Если необходимо увеличить уровень, т.е., level_L/R больше 1.0, придётся ввести проверку на переполнение.

                          Можно вынести манипуляции с сепмплами в DSP секцию, но раз времени мало, пусть будет так.
                          Сообщение отредактировано: Prince -
                            Спасибо большое! Еще если можно помогите воспроизвести выбраный канал... вот пробую так, но у меня звук прерывается
                            function stream(handle: HSTREAM; buffer: Pointer; length: DWORD; user: DWORD): Cardinal; stdcall;
                            var
                            c : integer;
                            begin
                            {c := BASS_ChannelGetData(rchanL, 0, 255);
                            if (c > (2 * (0 + 1764))) then
                            BASS_ChannelGetData(rchanL, 0, c);}
                            c := BASS_ChannelGetData(RchanL, buffer, length);

                            Result := c;
                            end;
                            procedure TForm1.Button2Click(Sender: TObject);
                            begin
                            rchanL := BASS_RecordStart(44100, 2, 0, Nil,nil);
                            pchan := BASS_StreamCreate(44100,2,0,@stream,0);
                            BASS_ChannelPlay(pchan,False);
                            end;

                            что я не учел?

                            Добавлено
                            так это же совсем не то...
                            Как воспроизвести тот канал который нужен с измененным уровнем звука?
                              Вы хотите отправлять записываемый звук сразу на воспроизведение? Т.е., организовать так называемый сквозной канал?
                                Вообще мне нужно записывать сигнал, который получаю от 2 источников, которые (сливаются) в стерео, программно их разделить, в случае необходимости уменьшить или увеличить входящий звук на обоих или отдельно на каждом из них, затем если пользователь нажмет прослушать, то воспроизводится ослабленный либо усиленный сигнал выбранного канала.
                                С вашей помощью я разобрал как вообще записывается сигнал, как его разделить, уменьшить звук, теперь мне осталось додумать индикатор, который дает знать какой уровень сигнала, зашкаливает, либо слабый, подумать над тем как при воспроизведении один (к примеру левый канал) сдублировать на правый(псевдо стерео)...

                                Добавлено
                                вот этот кусок дает мне индикатор, корректно?
                                procedure TForm1.Timer1Timer(Sender: TObject);

                                var
                                level,pl,pr:dword;

                                begin
                                level := BASS_ChannelGetLevel(rchanl);
                                pl := round(volume*loword(level)/32768*100);
                                cxTrackBar1.Position := 100-pl;
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 [2] 3 4  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1167 ]   [ 17 queries used ]   [ Generated: 12.07.26, 17:44 GMT ]