![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Как склеить 2 wav файла в один?
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
представляешь файлы как массив байтов и с склеиваешь два массива между собой. тут есть запара в том что в wav файле должен быть заголовок. вот тут есть похожая тема.
|
|||
|
||||
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
А стандартных функций в студии разве нет?
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
я стандартных функция для этого не знаю. не работал с этим. но тут ничего сложного, по примерам из той темы можно сделать очень просто, там вроде все объясняется и примеры есть. |
|||
|
||||
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Денис, если опустить громкость звука и всякую лабуду, нам надо только этот кусок кода:
Теперь вопрос: зачем нам 2 буфера? Тогда порядок действий для склеивания n файлов? Читаем первый, добавляем в очередь заголовок, добавляем к размеру нового файла размер текущего файла. Читаем следующий. потом получившийся массив читаем. Так? Тааак. А теперь вопрос, куда в буфер плеера вставлять заголовки файлов?? Или этого не надо делать? Т.е. можно для заголовка использовать какую-то рандомную строку, а в буфер добавлять содержание файлов и соответсвенно увеличивать длину файла? Это сообщение отредактировал(а) Ivankult - 14.12.2009, 19:15 --------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Здравствуйте.
Ivankult Собственно зачем вам их склеивать? Я же вам кинул пример(возможно не самый лучший но всётаки) того как это надо делать. Это сообщение отредактировал(а) KuMa1104 - 14.12.2009, 19:41 -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
В том то и дело, что не самый лучший. Если склеить буквы слова и воспроизвести файл, то задержки и "тормоза" программы будут в местах пробелов и не будут заметны.+ мне нужна функция записи прочитанного в файл.
Денис, вот я накарябал код, но сомневаюсь что будет работать. Проверять страшно))) А если честно то это е работает. Где ошибки и "косяки"?
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Вот поясните это, я не совсем вас понял. Почему вы решили что задержки и тормоза программы будут в местах пробелов и не будут заметны? -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Смотрите. Я побуквенно записываю в буфер звуки, потом воспроизвожу и собираю следующее слово, опять воспроизвожу, и т.д. Тогда все осн. команды и соответсвенно издержки, будут в местах пробелов, и пользователь это не заметит(какя разница-пробел будет длится 0,2 сек или 0.,4?)
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
KuMa1104 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Я так понял что Вы имеете в виду не буфер звуковой карты, а просто буфер в памяти( т.е. грубо говоря масив баитов)в него вы кидаете данные отдельных слов Слово "Мама" Буфер = М+а+м+а В вашем буфере 4 буквы после вы их воспроизводите. Знаете если вы будете непосредственно подкидывать каждую букву то это даст на мои взгляд большую чуствительность и удобность в управлении.
Хм На сколько я понимаю ваш алгоритм.
Лучше если когда вы програмируете под звуковую карту чтобы она работала в непрерывном режиме. У вас будет работать несколько потоков. 1. В обязанность одного будет входить только подкидывание новых буферов для воспроизведения. 2. В обязанности другого извлекать данные для этих буферов и создовать очередь которая будет воспроизводится первым потоком. Я бы посоветовал вас сделать анологично с алфавитом и пустые буферы для запятои точки пробела, разной длины и тогда просто подкидывать их в звуковую карту. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||
|
|||||
Экскалупатор |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
честно не знаю. может у человека там что то планировалось.
в общем похоже. в результате должно получиться так: заголовок(36 байт) + 4 байта (длина = сумма длин n файлов которые нужно клеить - 40*n байт заголовков из каждого файла) + остальное тело, т.е. содержимое всех файлов(исключая заголовки).
если я ничего не путаю то заголовок плееру не нужен, т.е. заголовок в плеер вставлять не нужно, заголовок нужен треку. т.е. сначала нужно склеить трек, а потом весь его передать в плеер. заголовок можно вырезать например у любого из файлов один раз и больше его не трогать. менять только размер тела и собственно само тело. по поводу пробелов и прочего, я так понимаю что у тебя должен быть трек отвечающий за паузу, т.е. тут надо не вешать приложение на определенное время а просто вставлять нужную паузу в трек. т.е. фактически должен получиться один большой трек, в котором будет находиться все что нужно читать. если планируется читать что то большое("Война и Мир" например) то наверное придется разбивать на куски какого более менее большого размера(пару метров, к примеру) и работать с ними. Добавлено @ 23:27 мне кажется что тут бы все ускорилось, если бы у тебя трек для каждой буквы был одного размера(в байтах) тогда можно было бы сразу подсчитать размер итогового буфера, и потом просто записать в него все что нужно, иначе придется менять размер при добавлении каждой новой буквы, а это чревато большими проблемами. Это сообщение отредактировал(а) Экскалупатор - 14.12.2009, 23:28 |
||||||
|
|||||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
В точку! ![]() Только незабудьте убедиться что у вас в чанках прописана одно итоже, иначе склеите треки с разнои частотой дискретизации, и вместо пауз и пробелов можете получить страшный вопль. Я когдато давно, так случаино сделал, а на калонках была большая громкость.... Всех родных среди ночи перепугал ![]() -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
да это правильно. в идеале, я считаю, надо вообще подготовить треки так что бы они во всем были одинаковы, ну кроме конечно содержания. и надо бы еще учитывать всякие варианты, при которых некоторые буквы не читаются. или читаются не так как пишется. например "йод" как будет читаться? или как читаться будет твердый/мягкий знак? сам знак не читается никогда, но меняет стоящую перед ним букву. потом отдельный вопрос с ударением. я например не знаю как реализовать этот момент. т.е. как программа прочитает слова зАмок и замОк? скорее всего прочитается замок, без ударения вообще, короче нюансов в этой проге намного больше чем можно представить с первого взгляда. тут кстати можно попробовать не по буквам читать а по целым словам. а не "известные" для проги слова читать по буквам. ![]() |
|||
|
||||
Ivankult |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Я не хотел в эту тему выкладывать свои сооброжения на тему говорилки(для этого есть своя тема) но ладно. Что я делаю:
1. Храню в БД или ресурс файле оцифрованные звуки(размер в байтах и массив байтов) 2.Читаю какую-то часть текста ("("Война и Мир" например) то наверное придется разбивать на куски какого более менее большого размера(пару метров, к примеру) и работать с ними.") и начинаю обрабатывать 3. Читаю в новую строку слово до первого пробела. 4. Обрабатываю слово(собираю трек), если есть такие вещи как мягкий знак или е,ё,я,ю то это обрабатывается тут же. 5.Запускаю трек и на опр. время усыпляю поток(вместо пробела, точки, запятой, двоеточия и т.д.) 6.Очищаю строку слова(то что делал в п.3) 7. Повторяю с п3 до п7. "Только незабудьте убедиться что у вас в чанках прописана одно итоже, иначе склеите треки с разнои частотой дискретизации, и вместо пауз и пробелов можете получить страшный вопль." Не понял о чем речьhttp://forum.vingrad.ru/html/emoticons/pack/dash1.gif Теперь вопрос Денису. "в общем похоже. в результате должно получиться так: заголовок(36 байт) + 4 байта (длина = сумма длин n файлов которые нужно клеить - 40*n байт заголовков из каждого файла) + остальное тело, т.е. содержимое всех файлов(исключая заголовки)." вообще-то, заголовок трека это 40 байт, + 4 байта длина файла(сумма длительности коротких треков),+само тело. Про заголовок спасибо что пояснил. Посмотрите пожалуйста, что я наваял, может где-то что-то можно исправить или оптимизировать --------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
|||
|
||||
Ivankult |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 8.9.2008 Репутация: нет Всего: нет |
Вот что я наваял:
класс AudioWAV
а вот код основного тела программы(не ругайтесь на ифы, так читабельнее, а потом ифы заменю на case)
Этот вариант полностью работает, все ошибки устранил Это сообщение отредактировал(а) Ivankult - 15.12.2009, 22:02 --------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |