powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация телефонных тонов в динамики(наушники) компьютера.
13 сообщений из 13, страница 1 из 1
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37982829
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. мне надо:
1) Длинный непрерывный гудок (трубка снята)
2) Длинные гудки (ожидание ответа)
3) Короткие гудки
4) Сигналы DTMF
5) Ну сигнал вх. вызова соответственно (звуковой файл, либо генератор чего либо)

В принципе это все "рюшечки" и для функциональности приложения не надо ибо opal.dll все и так делает, но есть частные случаи.

Если идет вызов и есть "early media" (голосовой кодек на этапе Ringing), то user слушает родные длинные гудки из линии, если media включается только при ответе, то до снятия трубки на том конце user слушает тишину.

"Busy" (Короткие гудки) и длинный гудок вообще не предусмотрены.
DTMF отправляется в сторону удаленного абонента, но надо б продублировать в динамик.
Вх. "звонок" тоже на совести App

ну и т.п.

Т.е. в ряде случаев всю эту "полифонию" должно генерировать App.
Ну понятно, что тона в разных странах разные, но это думаю можно легко додумать.

Поскольку недавно занимался миксерами volume/mute,
так понимаю, надо использовать:

Windows Multimedia API (XP/2003)
Core Audio APIs (Vista/Win7/2008) <<< это если по-хорошему

Есть еще всякие Direct Sound-ы, но думаю это не тот путь.

С последними на VB6 примеры я чет не рассчитываю, а вот с первым думаю они где-то есть.
Не подтолкнет меня кто в правильном направлении?
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37987151
vasatka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так не подойдёт?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

Private Sub Command1_Click()
    For i = 1 To 10
         Beep 440, 300: Beep 22000, 300 ' короткие гудки
    Next i
End Sub
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37987366
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasatkaА так не подойдёт?
Код: vbnet
1.
...         Beep 440, 300: Beep 22000, 300 ' короткие гудки


Ну, Beep выводит звук в системный динамик, а не в заданное звуковое устройство.
Мне нужно не простота, а качество.
PlaySound тоже кстати использовать не хочу.

Пока сделал проигрывание wav файла через Windows Multimedia API (тестовый проект во вложении).
1) Тупо открываем wav файл:
Код: vbnet
1.
   hMmioIn = mmioOpen(sSoundFile, mmioinf, MMIO_READ Or MMIO_ALLOCBUF)


читаем его формат и
2) с этим wav форматом открываем канал Player:
Код: vbnet
1.
  lR = waveOutOpen_play(hWaveOut, id, sFormatBuffer, Form1.hWnd, True, CALLBACK_WINDOW)


3) Дальше используя 5 буферов и Callback гоним туда потоковое Audio
Код: vbnet
1.
2.
 lR = mmioRead(hMmioIn, tWavHdr.lpData, lBufferSize)
lR = waveOutWrite(hWaveOut, ByVal lParam, LenB(tWavHdr))


4) Если хотим сделать Stop, то
Код: vbnet
1.
2.
3.
4.
5.
6.
waveOutReset hWaveOut 'сброс потока
'и для каждого из буферов
waveOutUnprepareHeader hWaveOut, tHdr(tWavHdr.dwUser), Len(tHdr(tWavHdr.dwUser))
lR = waveOutClose(hWaveOut) 'пока не выдаст lR = MMSYSERR_NOERROR
'потом можно 
mmioClose hMmioIn, 0 'закрываем WAV


5) если хотим гонять файл по кругу, то после последнего блока данных тупо переводим курсор на начало WAV не останавливая потока:
Код: vbnet
1.
  lR = mmioSeek(hMmioIn, lDataOffset, SEEK_SET)



По поводу пункта (5) честно думаю как сделать возможность Delay, т.е. файл проигрался, потом ждем напр. Delay=2сек, потом повторяем. Потому как в примере звонка(во вложенном файле) пришлось дописывать в wav 2 сек. тишины.
Но думаю самое простое, делать Stop и перезапускать wav-канал вместе с wav-файлом по тику таймера через эти 2 сек. Делать всякие Sleep при открытом канале я наверно не рискну. Буду смотреть уже в реальном приложении что лучше.

Дублировать воспроизведение через CoreAudio не уверен что надо, в принципе на 7-ке "старый код" работает, надо тестировать. С миксерами на вистах просто было много нелечимых глюков.

По поводу DTMF и гудков надо смотреть.
Нашел пока "генератор пилы" (пилит):
http://bit.pirit.info/forum/viewtopic.php?p=67598
посмотрю насколько это поможет.
Думаю сначала понять как делать DTMF, гудки по сути это тоже самое (частота, длительность и т.п.)
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37987394
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути вот:

http://idialer-wm.googlecode.com/svn-history/r2/trunk/iDialer/SoundUtils.cpp
или тут
http://msdn.microsoft.com/en-us/subscriptions/ms894872.aspx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
/*
DTMF frequencies:

DTMF stands for Dual Tone Multi Frequency. These are the tones you get when
you press a key on your telephone touchpad. The tone of the button is the
sum of the column and row tones. The ABCD keys do not exist on standard
telephones.

                        Frequency 1
Frequency 2


                    1209  1336  1477  1633

                         697   1     2     3     A

                         770   4     5     6     B

                      
                         852   7     8     9     C

                         941   *     0     #     D

Frequencies of other telephone tones

Type                Hz          On      Off
---------------------------------------------------------------------
Dial Tone         350 & 400     ---     ---
Busy Signal       480 & 620     0.5     0.5
Toll Congestion   480 & 620     0.2     0.3
Ringback (Normal) 440 & 480     2.0     4.0
Ringback (PBX)    440 & 480     1.5     4.5
Reorder (Local)   480 & 620     3.0     2.0
Invalid Number    200 & 400
Hang Up Warning 1400 & 2060     0.1     0.1
Hang Up         2450 & 2600     ---     ---
*/


Да и код шибко тяжелым не выглядит (на первый взгляд), но смущают
UINT32 в MIDI-структурах, а поиск с тегом VB6 ничего не дал.
Код: plaintext
1.
2.
3.
4.
5.
typedef struct _WAVEFORMAT_MIDI {
  WAVEFORMATEX wfx;
  UINT32 USecPerQuarterNote;
  UINT32 TicksPerQuarterNote;
} WAVEFORMAT_MIDI, *LPWAVEFORMAT_MIDI;
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37989273
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче через Windows Multimedia API доделал, кому интересно во вложении.

Вот отсюда взял модуль DTMF генератора.
https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=64048&lngWId=1
Основная идея, что записывается wav файл двухчастотного сигнала заданной длины.
Только файл на диск не пишется, а сохраняется в памяти.
Код: vbnet
1.
2.
PlaySoundFile (ptrMemory As Any... 
PlaySoundMemory(WavArray(0), 0, SND_MEMORY


меня не устроило, поэтому сделал:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
     With mmioinf
       .pIOProc = 0
       .pchBuffer = VarPtr(WavArray(0))
       .fccIOProc = mmioStringToFOURCC("MEM", 0) 'FOURCC_MEM
       .cchBuffer = UBound(WavArray)+1
     End With
     hMmioIn = mmioOpen(vbNullString, mmioinf, MMIO_READ) 'открываем "memory file" как обычный WAV 


Т.е. читаю memory file WAV, байтовый массив WavArray() с фрагментом звука.

Для телефонных сигналов генерируется wav-фрагмент гудка (2-частотные сигналы для США и одночастотный 425гц для РФ), этот фрагмент через требуемую паузу (а для длинного гудка непрерывным потоком) воспроизводится. Требуемый промежуток тишины делаю через тик таймера.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37991066
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, по моему проще было заготовить нужные wav'ки, при запуске программы вычитывать их в память, и при необходимости - подсовывать на воспроизведение. Собственно говоря в 2000-ных так и было реализовано в нескольких телефонных комплексах, которые я смотрел.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #37991968
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
а разве плохо сделал?
Для тональных сигналов я использую один "плавающий массив".
А пользовательские wav типа "звонок" (мож юзер туда полифонию от Nokia засунет) пусть с диска читает.
А держать в памяти кучу массивов, да ну.
Я довольно долго боролся с чтением "memory file" через mmioOpen, но сделал же. Уже хотел было сигналы в реальные wav-ы засунуть.

Хорошо б конечно в класс оформить (да не люблю я их), потому как в моем варианте одновременно может воспроизводиться только один wav. В приложение вставил, в целом устраивает. Накладывать звуки друг на друга думаю не надо. Напр. пришлось запретить воспроизводить DTMF при нажатии на клавишу, если идет сигнал вызова и т.п.
Но с другой стороны я всегда делаю в нужные моменты stop_wav независимо от того, что там играется.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38007630
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет ли у кого:
1) приличный набор wav рингтонов -когда телефон звонит (Ring...Ring, а не фигня какая-нибудь).
2) опять же приличный набор для использования как MusicOnHold

Для MusicOnHold желательно WAV 128кбит/сек 16 бит моно 8кГц PCM. (это для проигрывания в телефонную линию -поэтому с форматом ограничение, код типа того что я здесь нарисовал (Windows Multimedia API), но C-шный встроенный в Opal/ptlib)
Для Ring-Ring WAV -но подробности особой роли не играют, для проигрывания VB-кодом как в приложенном примере.

Я через Google пытался найти, но к сожалению по такому запросу в основном сайты с вирусами, порнушкой и сомнительными предложениями отправить SMS на мобильник.

Заранее благодарен.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38008867
vasatka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38009112
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasatka, спасибо

В принципе с рингтонами как бы проблем нет.
Например
на http://soundjax.com http://www.freesound.org/ и им подобным еще много можно найти.
Через звуковую карту собственной прогой выше все играется замечательно, в каком бы формате WAV оно не было.

А вот с MusicOnHold я что-то не догоняю какой-то истины.
Используется IVR из OPAL, по сути там те же самые Windows Multimedia API.
Например
1. скачиваю отсюда
http://www.starface.de/de/Downloads/moh.php
2. конвертирую стандартной прогой Пуск->Программы->Стандартные->Развлечения->Звукозапись (на XP)
Opal позволяет следующие форматы WAV:
128кбит/сек 16бит моно 8кГц PCM
64кбит/сек 8бит моно 8кГц PCM
Вопрос: разница есть? Чего лучше использовать? первый места больше занимает, а в 711 кодек ведь все одно больше чем 64кбит/сек не влезет.
3. Идем дальше. Если делаю звонок по локалке на SIP девайс, то что-то уж сильно громко играет. Или у меня девайс фигово настроен?
Звоню через SIP провайдера на МГТС - ну вроде не так громко.
Пытался "уменьшать громкость файла" через ту же "Звукозапись" -особо не влияет, кажется только качество поганится.
Вопрос: Что с громкостью файлов MusicOnHold должно быть?

А например хочу изготовить файл MusicOnHold сам. Скачиваю мелодию, чудесно: фортепьяно, скрипка.
Обычно все это в mp3.
Ну, иду сюда:
http://media.io/ru/
Конвертирую в wav -типа делает качественный эдак на 20-40 мегабайт, если 3-4 минуты, ну звучит (на компе) не хуже mp3.
Потом через "Звукозапись" делаю нужный формат как выше, получается эдак на 2-4МБ.
Но фигня в том что в большинстве случаев скрипки хрипят, пианины ездят по ушам и в телефоне все звучит не есть гуд.
Вопрос: Как вообще эти штуки готовить?

Короче просьба поделиться опытом, если у кого есть.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38009123
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте сначала из исходника файл с помощью нормального звуко-редактора (SoundForge, например), нормализуя уровень, накладывая фильтры...
Затем уже сохраните в нужном формате (для телефонки вообще можно использовать, например, ADPCM 8 кГц) - как обычный wav.
Ну и пользуйте...
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38009997
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Честно говоря неохота на этом зацикливаться. От проги собственно требуется проиграть файл в линию, она это делает, а прогу еще писать и писать.
Вот нашел еще 3 штуки готовых в CCITT-ulaw:
https://support.nextiva.com/index.php?_m=downloads&_a=view&parentcategoryid=1&pcid=0&nav=0
С громкостью и нежелательными хрипами все нормально, но кстати обратил внимание что они сами по себе "очень тихие" в отличии от файлов по ссылке выше на starface.

AndreTMСделайте сначала из исходника файл с помощью нормального звуко-редактора (SoundForge, например), нормализуя уровень, накладывая фильтры...
Затем уже сохраните в нужном формате
Позже м.б. поэкспериментирую, когда папку с примерами буду готовить.
Ну то что если как попало делать , то что попало получится , это я осознал.
Четких инструкций как конкретно делать (по пунктам с акцентом на что обратить внимание) конкретным инструментом нету?
Я как бы не специалист по акустике, но набор Г.-на на 10-20MB в дистрибутив тоже засовывать бы не хотелось, нужно несколько не очень больших штук -оригинальных и хорошего качества -на копирайты (если это понятие тут вообще применимо) честно говоря наплевать.
...
Рейтинг: 0 / 0
Генерация телефонных тонов в динамики(наушники) компьютера.
    #38108097
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMСделайте сначала из исходника файл с помощью нормального звуко-редактора (SoundForge, например), нормализуя уровень, накладывая фильтры...
Затем уже сохраните в нужном формате (для телефонки вообще можно использовать, например, ADPCM 8 кГц) - как обычный wav.
Ну и пользуйте...

Короче если использовать вот это:
Дмитрий77 SoX - Sound eXchange
Она еще и mp3 в wav конвертирует если правильную libmad.dll нарыть.

Код: vbnet
1.
Shell (sox.exe %1 -c 1 -b 16 -r 8k test.wav)



Либо
Код: vbnet
1.
sox.exe %1 -c 1 -b 8 -r 8k test.wav



То из любого wav или mp3 получается отличный "нормализованный" готовый к употреблению в пищу Music_on_Hold без хрипов и т.п.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Генерация телефонных тонов в динамики(наушники) компьютера.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]