Как наложить программно один wav файл на другой?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
-=alp=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 147
Зарегистрирован: 08.03.2003 (Сб) 19:20

Как наложить программно один wav файл на другой?

Сообщение -=alp=- » 17.03.2004 (Ср) 16:11

Как наложить программно один wav файл на другой?
То есть эти два файла должны играть одновременно и притом должны быть одним файлом.

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Сообщение Ilya Vasilyev » 18.03.2004 (Чт) 6:23

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.03.2004 (Чт) 10:16

1. Микшируешь их и воспроизводишь результат.
2. Воспроизводи через DirectX.
Lasciate ogni speranza, voi ch'entrate.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 18.03.2004 (Чт) 11:48

Зачем через DirectX......Можно и так:
Код: Выделить всё
Option Explicit

' Функции и константы для проигрывания звуков. Декларации.
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Declare Function sndStopSound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszNull As Long, ByVal uFlags As Long) As Long

' Звук воспроизводится синхронно, и функция не возвращает _
управления до окончания его проигрывания SND_SYNC = &H0

' Звук воспроизводится асинхронно, функция возвращает управление _
сразу после начала воспроизведения SND_ASYNC = &H1

' Для прекращения воспроизведения необходимо вызвать sndPlaySound() _
c NULL  в качестве аргумента-имени файла

' Если указанный файл отсутствует, функция неделает ничего SND_NODEFAULT = &H2

' Параметр SoundName указывает на звук, образ которого уже _
находится в оперативной памяти SND_MEMORY = &H4

' Воспроизведение звука повторяется до тех пор, пока не будет _
вызвана функция sndPlaySound() c NULL  в качестве  SND_LOOP = &H8

' параметра IpszSoundName. Для работы этого флага необходимо _
установить также флаг SND_ASYNC.

' Если звук уже воспроизводится, функция не прерывает его _
воспроизведение, а немедленно возвращает FALSE SND_NOSTOP = &H10

Private Sub Command1_Click()
    Dim retcode1 As Integer
    Dim retcode2 As Integer
    retcode1 = sndPlaySound("....путь к файлу\1.wav", &H0)
    retcode2 = sndPlaySound("....путь к файлу\2.wav", &H0)
End Sub

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.03.2004 (Чт) 20:52

Пользуясь случаем, повторяю свой очень старый вопрос: как слить несколько файлов .wav в один без потери звуковых данных?
Моду создают модоки, а распространяют модозвоны.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 19.03.2004 (Пт) 11:23

А как нужно:
1. Чтобы они паралельно играли?
2. Один после другого?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.03.2004 (Пт) 13:58

hCORe писал(а):Пользуясь случаем, повторяю свой очень старый вопрос: как слить несколько файлов .wav в один без потери звуковых данных?

Что значит "слить"?
Если микшировать, то как тогда понять "без потери звуковых данных"?
Если ты их смикшируешь, то потом разъединить не сможешь.

А если имеешь ввиду, создать многоканальный WAV, так можно, в спецификации формата для количества каналов используется Integer, т.е. их можно наделать сколько душа желает. Только не факт, что какая-нибудь другая программа, кроме твоей, сможет его потом воспроизвести.
Lasciate ogni speranza, voi ch'entrate.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 20.03.2004 (Сб) 23:42

Нужно соединить звуковые потоки из нескольких WAV'ов в одном файле :cry:
Моду создают модоки, а распространяют модозвоны.

-=alp=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 147
Зарегистрирован: 08.03.2003 (Сб) 19:20

Сообщение -=alp=- » 21.03.2004 (Вс) 14:53

надо чтобы эти файлы сталь одним файлом

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 21.03.2004 (Вс) 16:47

Ага, именно! Только как это реализовать :?:
Моду создают модоки, а распространяют модозвоны.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4160
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.03.2004 (Вс) 18:56

Если это обычный PCM-WAV, и форматы ОБОИХ файлов одинаковы, то нет проблем. Первые 44 байта (если не ошибаюсь) - заголовок. Там есть размер данных. Берем не все, что после заголовка, а именно по размеру потому, что после данных бывает еще другая информация (редко). Копируем заголовок с одного из файлов, дальше его данные, дальше данные второго файла. В заголовке меняем размер на новый (сумма двух старых).

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 22.03.2004 (Пн) 18:21

Посмотри здесь, я уже писал об этом:
http://bbs.vbstreets.ru/viewtopic.php?t=4848&highlight=wav.
Как доработать эту функцию?
Проблема уже решена, но мне просто интересно :roll:
Моду создают модоки, а распространяют модозвоны.

Scythian
Бывалый
Бывалый
 
Сообщения: 273
Зарегистрирован: 29.05.2002 (Ср) 14:08
Откуда: Russia

Сообщение Scythian » 23.03.2004 (Вт) 16:47

Очень просто - я так понял тебе нужно смикшировать два файла, и результат слить в один? Тогда тебе нужно просто сложить (+)амплитуды, соответствующие одному моменту времени (и нормализовать - хотя бы разделить пополам, чтобы не вылезти за границы разрядной сетки). Этого достаточно для PCM *.wav. Почитай еще про его формат :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, PetalBot, SemrushBot, Yandex-бот и гости: 12

    TopList