Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клеим Звук, Как склеить 2 wav файла в один? 
V
    Опции темы
Экскалупатор
Дата 15.12.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Ivankult, привет
Цитата

вообще-то, заголовок трека это 40 байт, + 4 байта длина файла(сумма длительности коротких треков),+само тело. Про заголовок спасибо что пояснил.


согласен. немного запутался вчера...
по поводу ошибок. в первой говорит что заголовок неверный. перепроверь что ты там создаешь. ниже структура заголовка.
Код

struct head_data
 {
  public:
  char s1[4];             // 'RIFF' - сигнатура - 4 байта
  long len1;              // длина всего оставшегося  - long - 4 байта             -- вот его нужно менять
  char s2[8];             // 'WAVEfmt '  - сигнатура - 8 байт
  long d_size;            // размер блока данных заголовка - обычно 16 - long - 4 байта
  short int format;       // формат данных  - short int - 2 байта
  // 1-PCM, 2-ADPCM, ... , 85-MPEG Layer-3, ... sorry, it's all that i know :-(
  short int channels;     // число каналов (моно-1/стерео-2) - short int - 2 байта
  long discret;           // частота дискретизации - long - 4 байта
  long stream;            // поток, байт/сек, = (частота дискр * алигмент) - long - 4 байта
  short int bl_align;     // алигмент, (байт за 1 отсчет = channels*bit/8) - short int - 2 байта
  short int bitrate;      // число бит при оцифровке (8/16) - short int - 2 байта
  char s3[4];             // 'data' - сигнатура - 4 байта
  long len2;              // длина следующих после этого чистых wave-данных - long - 4 байта        -- и его тоже 
  //Summary 44 байта
 };

второй говорит что файл занят. т.е. ты открыл поток, прочитал файл, но поток остался открыт, или сборщик мусора его не успел собрать. попробуй обернуть это место в using
Код

using (FileStreamWav = File.Open(WavFileName, FileMode.Open))
{
                SoundBuffMain = new byte[FileStreamWav.Length - WavHeaderSize - WavHeaderBodyLenghSize];
                int tempLength = SoundBuffMain.Length;
                SoundLength += SoundBuffMain.Length;              
                FileStreamWav.Position = WavHeaderSize + WavHeaderBodyLenghSize;
                FileStreamWav.Read(SoundBuffMain, 0, tempLength);
                Sounds.Add(SoundBuffMain);
                FileStreamWav.Read(SoundBuffHeader, 0, WavHeaderSize); // Заголовок кроме последней длины
}


теперь самое прикольно. по поводу основного тела(хорошо что потом заменишь на CASE) но я не понял зачем тебе два раза проверять одни и теже буквы? я имею ввиду "а" и "А", это одинаковые буквы только в разном регистре. если сделать перевод всех букв в один регистр например методом String.ToLower, то у тебя сразу отпадет половина блоков if. и еще для меня осталось загадкой зачем проверять по два раза? один раз в методе
Код

bool isRusChar(char ch)

а второй в обработчике кнопки. на мой взгляд достаточно и одного раза. хотя это наверняка должен делать класс который клеит звук. но в любом случае не форма которая является интерфейсом пользователя.
PM MAIL ICQ   Вверх
KuMa1104
Дата 15.12.2009, 18:44 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Ivankult @  15.12.2009,  06:48 Найти цитируемый пост)
1. Храню в БД или ресурс файле оцифрованные звуки(размер в байтах и массив байтов)2.Читаю какую-то часть текста ("("Война и Мир" например) то наверное придется разбивать на куски какого более менее большого размера(пару метров, к примеру) и работать с ними.") и начинаю обрабатывать3. Читаю в новую строку слово до первого пробела.4. Обрабатываю слово(собираю трек), если есть такие вещи как мягкий  знак или е,ё,я,ю то это обрабатывается тут же.5.Запускаю трек и на опр. время усыпляю поток(вместо пробела, точки, запятой, двоеточия и т.д.)6.Очищаю строку слова(то что делал в п.3)7. Повторяю с п3 до п7.


Я бы вам очень советовал пересмотреть ваш алгоритм пока вы ещё не написали много кода. Потом будет очень сложно всё менять.

Цитата(KuMa1104 @  14.12.2009,  22:35 Найти цитируемый пост)
 У вас будет работать несколько потоков. 1.  В обязанность одного будет входить только подкидывание новых буферов для воспроизведения.2.  В обязанности другого извлекать данные для этих буферов и создовать очередь которая будет воспроизводится первым потоком.


Добавлено через 11 минут и 57 секунд
Здравствуй Экскалупатор!

Цитата(Экскалупатор @  15.12.2009,  15:16 Найти цитируемый пост)
.ниже структура заголовка

Ухс помню я его в ручную заполнял, не весело было.

Я код особо не смотрел.
А как Ivankult подаёт буферы в звуковую карту.
там много кода в том все не читал, видимо
Код

 FileStreamWav.Read(SoundBuffMain, (int)FileStreamWav.Position, SoundBuffMain.Length);
 Player.Stream.Write(DataLenArray, 0, DataLenArray.Length);// воспроизводим

Так вот я так понемаю что SoundPlayer оперирует сразу только одним буфером.
Т.е. если в него что то закинули то он это воспроизведёт, потом закидываем что то новое.
А можно закидывать прям во время воспроизведения чтоб оно выполнялось без задержек на
Player.Stream.Write?


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Heinzz
Дата 15.12.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Цитата(Экскалупатор @  15.12.2009,  15:16 Найти цитируемый пост)
второй говорит что файл занят. т.е. ты открыл поток, прочитал файл, но поток остался открыт, или сборщик мусора его не успел собрать. попробуй обернуть это место в using

GC шайтан-сундук! успеет или нет непонятно, но вот "зоопарк" точно не успеет. Предлагаю все файлы предварительно загрузить в MemoryStream-ы и уже из них читать/переводить позицию на начало.


--------------------
user posted image
PM MAIL   Вверх
Экскалупатор
Дата 15.12.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Heinzz, а что такое "зоопарк"?
Цитата

но вот "зоопарк" точно не успеет.


загрузить сразу все конечно можно, но если их там штук 50? да и держать постоянно все это тоже как то не очень. хотя если учесть что там по одной букве...
Цитата(KuMa1104 @  15.12.2009,  17:44 Найти цитируемый пост)
А можно закидывать прям во время воспроизведения чтоб оно выполнялось без задержек на
Player.Stream.Write? 


вроде нельзя. он по идее только один трек воспроизводит. так что надо собирать а потом воспроизводить.

PM MAIL ICQ   Вверх
KuMa1104
Дата 15.12.2009, 20:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Экскалупатор @  15.12.2009,  20:15 Найти цитируемый пост)
вроде нельзя. он по идее только один трек воспроизводит. так что надо собирать а потом воспроизводить.

Это плохо.

Тогда если автор нехочит мучиться, то возможно деиствительно не стоит стремится к совершенству.
Нарезать куски по 1 мин. и после того как кусок проигран тут же подкидывать следующий.
Эти минутные треки естественно компоновать в другом потоке и все это синхронизировать.

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




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Heinzz
Дата 15.12.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Цитата(Экскалупатор @  15.12.2009,  20:15 Найти цитируемый пост)
Heinzz, а что такое "зоопарк"?
Цитата

но вот "зоопарк" точно не успеет.



две "о" подряд


--------------------
user posted image
PM MAIL   Вверх
Экскалупатор
Дата 15.12.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Heinzz, аааа, понятно.))))) да "зоопарк" наверное не успеет. это ты хорошо заметил.

меня больше интересует процесс обработки знаков препинания. особенно те которые меняют интонации. как например будут отличаться вопросительные предложения от повествовательных? если читать по одному слову, а вместо знаков ставить поток в паузу, то это как то странно.
PM MAIL ICQ   Вверх
KuMa1104
Дата 15.12.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Экскалупатор @  15.12.2009,  22:41 Найти цитируемый пост)
меня больше интересует процесс обработки знаков препинания. особенно те которые меняют интонации. как например будут отличаться вопросительные предложения от повествовательных? если читать по одному слову, а вместо знаков ставить поток в паузу, то это как то странно.


Вопрос конечно интересный, как вариант необходимо как то осуществить что то вроде эквалаизера.
ИМХО. Там ведь фактически просто происходит усиление отдельнои полосы частот.

После этого  сделать несколько регулярных выражений для анализа структуры предложений.
И в соответствии с этим уже использовать ф-ии эквалаизера.

Но думаю что это можно сделать как то попроще.



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Heinzz
Дата 17.12.2009, 11:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



Цитата(KuMa1104 @  15.12.2009,  23:15 Найти цитируемый пост)

После этого  сделать несколько регулярных выражений для анализа структуры предложений.


"У Вас на улице перевернулся камаз с пряниками?"
Вопросительное выражение может иметь ударение на разные слова и смысл вопроса будет меняться. Это уже от контекста зависит.
Спрашивающий может уточнять : перевернулся ли именно камаз, с пряниками ли или просто место где перевернулся на улице или в ограде.




--------------------
user posted image
PM MAIL   Вверх
KuMa1104
Дата 17.12.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Цитата(Heinzz @  17.12.2009,  11:36 Найти цитируемый пост)
"У Вас на улице перевернулся камаз с пряниками?"
 Класс! Образно и при этом очень наглядно smile 

Это прямо какои то тест Тьюринга получается. Человек из контекста может впринципе легко понять как нужно правильно читать а машина нет (или с большим трудом?).



--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Экскалупатор
Дата 17.12.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



KuMa1104, наверное все такие "нет" ничерта эта машина не поймет, потому что компьютер делает только то что ему скажут и обучат, так что сам он не будет. а как научить? я например даже не представляю, а все что видел из читалок, это в основном тупое чтение отдельных букв(в лучшем случае целых слов).
PM MAIL ICQ   Вверх
KuMa1104
Дата 18.12.2009, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Ну наше мышление основано тоже на неких принципах, поэтому часто говорят что наш образ мышления и например японцев отличаеться.

Кроме того сушествуют же самообучаюшиеся программы.Я сейчас запямятовал. помоему неиросеть или как то так называеться я про это гдето краем глаза читал.
Суть в том что впринципе автор топика может написать такое приложение которое будет обучатся и когданибудь заговорит настоящим человеческим голосом.

После этого автор продаст его и заработае миллионы!!!

А после я надеюсь он вспомнит тех скромных форумчан которые стояли у истоков его проекта, и старались помочь кто чем может smile 


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
Ivankult
Дата 21.12.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



я все подправил уже давно ,код на первой странице. а про case забыл, извините))
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1124 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.