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

Поиск:

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


Бывалый
*


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

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



Как склеить 2 wav файла в один?
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Экскалупатор
Дата 13.12.2009, 14:12 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



представляешь файлы как массив байтов и с склеиваешь два массива между собой. тут есть запара в том что в wav файле должен быть заголовок. вот тут есть похожая тема.
PM MAIL ICQ   Вверх
Ivankult
Дата 13.12.2009, 18:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А стандартных функций в студии разве нет?
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Экскалупатор
Дата 13.12.2009, 19:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(agealex @  3.6.2009,  15:35 Найти цитируемый пост)
Там считываешь с начала массива  40 байт - это твой заголовок (весь заголовок занимает 44 байта учти при поправке на считывание,последние  4 байта длинна тела) - сохраняешь его в массив, затем при считывание буффера с нужного места дописываешь к заголовку сначала 4 байта длины будующего тела, а уж потом и само тело - и проигрываешь его, код вечером выложу.



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


Бывалый
*


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

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



Денис, если опустить громкость звука и всякую лабуду, нам надо только этот кусок кода:
Код

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Media;
using System.IO;
using System.Runtime.InteropServices;

namespace ShowDialog
{
    class Audio
    {
        #region SoundMixer
        [DllImport("coredll.dll", SetLastError = true)]        *********************
        protected static extern int waveOutSetVolume(IntPtr device, uint volume);*
                                                                                                                             *
        [DllImport("coredll.dll", SetLastError = true)]                                                *
                                                                                                                              *
        internal static extern int waveOutSetVolume(IntPtr device, int volume);      *
                                                                                                                              *
        [DllImport("coredll.dll", SetLastError = true)]                                                 *
                                                                                        *********************а это нам зачем, и что это вообще??
        #endregion                                                           


        #region declaretion

        private const byte WavHeaderSize = 40; //Размер заголовка Wav файла без размера тела (4 байта еще)
        private const byte WavHeaderBodyLenghSize = 4;// Размер тела WAV файла

        private const String WavFileName = "\\rus.wav"; // Название фалйла и путь к нему

        public byte[] SoundBuffHeader;
        private byte[] SoundBuffMain;

        public int BuffSize = 600000; //размер буфера
        public SoundPlayer Player;

        private FileStream FileStreamWav;
        private Stream SoundStream;

        #endregion

        public Audio()
        {
            //Буфера wav фала
            SoundBuffHeader = new byte[WavHeaderSize + WavHeaderBodyLenghSize];
            FileStreamWav = File.Open(WavFileName, FileMode.Open);
            SoundBuffMain = new byte[FileStreamWav.Length - WavHeaderSize - WavHeaderBodyLenghSize];

            #region BufferRead
            // Считывание заголовка
            FileStreamWav.Position = 0;
            FileStreamWav.Read(SoundBuffHeader, 0, WavHeaderSize); // Заголовок кроме последней длины


            #endregion

            SoundStream = new MemoryStream();
            Player = new SoundPlayer();
            Player.Stream = new MemoryStream();
        }

        //Воспроизводит WAV файлы
        public void PlaySound(int StartPosition, int StopPosition)
        {
            Player = new SoundPlayer();
            Player.Stream = new MemoryStream();
            int PlayingSoundSize = 0; // Размер тела wav файла
            byte[] DataLenArray;

            PlayingSoundSize = StopPosition - StartPosition;
            // Запись в заголовок информации о размере тела файла
            DataLenArray = BitConverter.GetBytes(PlayingSoundSize);
            DataLenArray.CopyTo(SoundBuffHeader, WavHeaderSize);
            DataLenArray = BitConverter.GetBytes(PlayingSoundSize + WavHeaderSize - WavHeaderBodyLenghSize);
            DataLenArray.CopyTo(SoundBuffHeader, WavHeaderBodyLenghSize);

            //Запись заголовка в проигрываемый файл
            Player.Stream.Position = 0;
            Player.Stream.Write(SoundBuffHeader, 0, SoundBuffHeader.Length);
            // Запись самого тела

            byte[] test = new byte[PlayingSoundSize];

            FileStreamWav.Position = StartPosition;
            FileStreamWav.Read(test, 0, PlayingSoundSize); // Весь файл кроме заголовка

            Player.Stream.Write(test, 0, test.Length);

            Player.Stream.Position = 0;

            Player.Load();
            Player.Play();


        }
        //Остановка плеера
        public void StopPlaying()
        {
            Player.Stop();
        }
    }
}





Теперь вопрос: зачем нам 2 буфера?
Тогда порядок действий для склеивания n файлов? Читаем первый, добавляем в очередь заголовок, добавляем к размеру нового файла размер текущего файла. Читаем следующий. потом получившийся массив читаем. Так?
Тааак. А теперь вопрос, куда в буфер плеера вставлять заголовки файлов?? Или этого не надо делать? Т.е. можно для заголовка использовать какую-то рандомную строку, а в буфер добавлять содержание файлов и соответсвенно увеличивать длину файла?

Это сообщение отредактировал(а) Ivankult - 14.12.2009, 19:15
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
KuMa1104
Дата 14.12.2009, 19:40 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте.
Ivankult Собственно зачем вам их склеивать?
Я же вам кинул пример(возможно не самый лучший но всётаки) того как это надо делать.

Это сообщение отредактировал(а) KuMa1104 - 14.12.2009, 19:41


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

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


Бывалый
*


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

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



В том то и дело, что не самый лучший. Если склеить буквы слова и воспроизвести файл, то задержки и "тормоза" программы будут в местах пробелов и не будут заметны.+ мне нужна функция записи прочитанного в файл.

Денис, вот я накарябал код, но сомневаюсь что будет работать. Проверять страшно))) А если честно то это е работает. Где ошибки и "косяки"?
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq;
using System.Media;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections;

namespace media
{
    class AudioWAV
    {
        private const byte WavHeaderSize = 40; //Размер заголовка Wav файла без размера тела (4 байта еще)
        private const byte WavHeaderBodyLenghSize = 4;// Размер тела WAV файла
        private String WavFileName = "\\rus.wav"; // Название фалйла и путь к нему
        public byte[] SoundBuffHeader;
        private byte[] SoundBuffMain;
        private byte[] SoundBuff;
        private ArrayList Sounds;
        private int SoundLength;
        public int BuffSize = 600000; //размер буфера
        public SoundPlayer Player;
        private FileStream FileStreamWav;
        private Stream SoundStream;        

        public AudioWAV(ArrayList soundsNames)
        {
            Sounds.Clear();
            SoundLength = 0;    // Размер тела нового файла        
            for (int i = 0; i < soundsNames.Count; i++)
            {
                WavFileName = (string)soundsNames[i];
                //Буфера wav файла
                SoundBuffHeader = new byte[WavHeaderSize + WavHeaderBodyLenghSize];
                FileStreamWav = File.Open(WavFileName, FileMode.Open);
                SoundBuffMain = new byte[FileStreamWav.Length - WavHeaderSize - WavHeaderBodyLenghSize];
                SoundLength += SoundBuffMain.Length;              
                FileStreamWav.Position = WavHeaderSize + WavHeaderBodyLenghSize;
                FileStreamWav.Read(SoundBuffMain, (int)FileStreamWav.Position, SoundBuffMain.Length);
                Sounds.Add(SoundBuffMain);
                FileStreamWav.Read(SoundBuffHeader, 0, WavHeaderSize); // Заголовок кроме последней длины
            }                        
            SoundStream = new MemoryStream();
            Player = new SoundPlayer();
            Player.Stream = new MemoryStream();                        
            byte[] DataLenArray; //буфер заголовка нового файла            
            // генерация заголовка файла            
            DataLenArray=new byte[WavHeaderSize+WavHeaderBodyLenghSize];
            DataLenArray.CopyTo(SoundBuffHeader,0);
            byte[] soundsize = BitConverter.GetBytes(SoundLength); int kpos = 0;
            for (int i = 0; i < WavHeaderBodyLenghSize; i++) 
            {
                DataLenArray[i + WavHeaderSize] = 0;
                if (i >= WavHeaderSize + WavHeaderBodyLenghSize - soundsize.Length)
                { DataLenArray[i + WavHeaderSize] = soundsize[kpos]; kpos++; }
            }
            //Запись заголовка в проигрываемый файл
            Player.Stream.Position = 0;
            Player.Stream.Write(DataLenArray, 0, DataLenArray.Length);
            byte[] test = new byte[SoundLength];  //генерация самого тела            
            int pos = 0;
            for (int i = 0; i < Sounds.Count; i++)
            {
                byte[] temps = (byte[])Sounds[i];
                for (int j = 0; j < temps.Length; j++)
                {
                    test[pos] = temps[j]; pos++;
                }
            }            
            //запись тела
            Player.Stream.Write(test,WavHeaderSize+WavHeaderBodyLenghSize, test.Length);
        }
        
        public void PlaySound()
        {            
            Player.Stream.Position = 0;
            Player.Load();
            Player.Play();
        }
        //Остановка плеера
        public void StopPlaying()
        {
            Player.Stop();
        }
    }
}



--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
KuMa1104
Дата 14.12.2009, 20:33 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ivankult @  14.12.2009,  20:15 Найти цитируемый пост)
Если склеить буквы слова и воспроизвести файл, то задержки и "тормоза" программы будут в местах пробелов и не будут заметны.+ мне нужна функция записи прочитанного в файл.

Вот поясните это, я не совсем вас понял.
Почему вы решили что задержки и тормоза программы будут в местах пробелов и не будут заметны?



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

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


Бывалый
*


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

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



Смотрите. Я побуквенно записываю в буфер звуки, потом воспроизвожу и собираю следующее слово, опять воспроизвожу, и т.д. Тогда все осн. команды и соответсвенно издержки, будут в местах пробелов, и пользователь это не заметит(какя разница-пробел будет длится 0,2 сек или 0.,4?)
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
KuMa1104
Дата 14.12.2009, 22:35 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ivankult @  14.12.2009,  21:20 Найти цитируемый пост)
 Я побуквенно записываю в буфер звуки

Я так понял что Вы имеете в виду не буфер звуковой карты, а просто буфер в памяти( т.е. грубо говоря масив баитов)в него вы кидаете данные отдельных слов

Слово "Мама"
Буфер = М+а+м+а  В вашем буфере 4 буквы после вы их воспроизводите.

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

Цитата(Ivankult @  14.12.2009,  21:20 Найти цитируемый пост)
 Тогда все осн. команды и соответсвенно издержки, будут в местах пробелов, и пользователь это не заметит(какя разница-пробел будет длится 0,2 сек или 0.,4?)


Хм На сколько я понимаю ваш алгоритм.
Код

воспроизвожу буфер(Мама)
идет задержка до следущего слова
Воспроизвожу следующий буфер (Мыла)


Лучше если когда вы програмируете под звуковую карту чтобы она работала в непрерывном режиме.
 У вас будет работать несколько потоков. 
1.  В обязанность одного будет входить только подкидывание новых буферов для воспроизведения.
2.  В обязанности другого извлекать данные для этих буферов и создовать очередь которая будет воспроизводится первым потоком.

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







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

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


Эксперт
***


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

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



Цитата

Теперь вопрос: зачем нам 2 буфера?


честно не знаю. может у человека там что то планировалось.

Цитата

Тогда порядок действий для склеивания n файлов? Читаем первый, добавляем в очередь заголовок, добавляем к размеру нового файла размер текущего файла. Читаем следующий. потом получившийся массив читаем. Так?


в общем похоже. в результате должно получиться так: заголовок(36 байт) +  4 байта (длина = сумма длин n файлов которые нужно клеить - 40*n байт заголовков из каждого файла) + остальное тело, т.е. содержимое всех файлов(исключая заголовки).

Цитата

Тааак. А теперь вопрос, куда в буфер плеера вставлять заголовки файлов?? Или этого не надо делать? Т.е. можно для заголовка использовать какую-то рандомную строку, а в буфер добавлять содержание файлов и соответсвенно увеличивать длину файла?


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

по поводу пробелов и прочего, я так понимаю что у тебя должен быть трек отвечающий за паузу, т.е. тут надо не вешать приложение на определенное время а просто вставлять нужную паузу в трек. т.е. фактически должен получиться один большой трек, в котором будет находиться все что нужно читать. если планируется читать что то большое("Война и Мир" например) то наверное придется разбивать на куски какого более менее большого размера(пару метров, к примеру) и работать с ними.

Добавлено @ 23:27
мне кажется что тут бы все ускорилось, если бы у тебя трек для каждой буквы был одного размера(в байтах) тогда можно было бы сразу подсчитать размер итогового буфера, и потом просто записать в него все что нужно, иначе придется менять размер при добавлении каждой новой буквы, а это чревато большими проблемами.

Это сообщение отредактировал(а) Экскалупатор - 14.12.2009, 23:28
PM MAIL ICQ   Вверх
KuMa1104
Дата 14.12.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Экскалупатор @  14.12.2009,  23:25 Найти цитируемый пост)
по поводу пробелов и прочего, я так понимаю что у тебя должен быть трек отвечающий за паузу

В точку! smile 

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

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


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

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


Эксперт
***


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

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



Цитата

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


да это правильно. в идеале, я считаю, надо вообще подготовить треки так что бы они во всем были одинаковы, ну кроме конечно содержания.

и надо бы еще учитывать всякие варианты, при которых некоторые буквы не читаются. или читаются не так как пишется. например "йод" как будет читаться? или как читаться будет твердый/мягкий знак? сам знак не читается никогда, но меняет стоящую перед ним букву. потом отдельный вопрос с ударением. я например не знаю как реализовать этот момент. т.е. как программа прочитает слова зАмок и замОк? скорее всего прочитается замок, без ударения вообще, короче нюансов в этой проге намного больше чем можно представить с первого взгляда. тут кстати можно попробовать не по буквам читать а по целым словам. а не "известные" для проги слова читать по буквам.

 smile если честно то я подобные программы вообще не очень жалую, потому что они для каких то лентяев сделаны. и когда такая программа читает книгу, то ощущения от такого "чтения" просто отвратительные. намного приятнее расположится в кресле с книжкой и читать самостоятельно.
PM MAIL ICQ   Вверх
Ivankult
Дата 15.12.2009, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 байта длина файла(сумма длительности коротких треков),+само тело. Про заголовок спасибо что пояснил.

Посмотрите пожалуйста, что я наваял, может где-то что-то можно исправить или оптимизировать
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Ivankult
Дата 15.12.2009, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот что я наваял:

класс AudioWAV
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq;
using System.Media;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections;

namespace media
{
    class AudioWAV
    {
        private const byte WavHeaderSize = 40; //Размер заголовка Wav файла без размера тела (4 байта еще)
        private const byte WavHeaderBodyLenghSize = 4;// Размер тела WAV файла
        private static String WavFileName = "\\rus.wav"; // Название фалйла и путь к нему
        public static byte[] SoundBuffHeader;
        private static byte[] SoundBuffMain;
        private static byte[] SoundBuff;
        private static ArrayList Sounds;
        private static int SoundLength;
        public static int BuffSize = 600000; //размер буфера
        public static SoundPlayer Player;
        private static FileStream FileStreamWav;
        private static Stream SoundStream;        

        public AudioWAV(ArrayList soundsNames)
        {
            Sounds = new ArrayList();
            SoundLength = 0;    // Размер тела нового файла        
            for (int i = 0; i < soundsNames.Count; i++)
            {
                WavFileName = (string)soundsNames[i];
                //Буфера wav файла
                SoundBuffHeader = new byte[WavHeaderSize];
                FileStreamWav = File.Open(WavFileName, FileMode.Open);
                SoundBuffMain = new byte[FileStreamWav.Length - WavHeaderSize - WavHeaderBodyLenghSize];
                int tempLength = SoundBuffMain.Length;
                SoundLength += tempLength;              
                FileStreamWav.Position = WavHeaderSize + WavHeaderBodyLenghSize;
                FileStreamWav.Read(SoundBuffMain, 0, tempLength);
                Sounds.Add(SoundBuffMain);
                FileStreamWav.Position = 0;
                FileStreamWav.Read(SoundBuffHeader, 0, WavHeaderSize); // Заголовок кроме последней длины
            }                                    
        }
        
        public void PlaySound()
        {
            SoundStream = new MemoryStream();
            Player = new SoundPlayer();
            Player.Stream = new MemoryStream();
            byte[] DataLenArray; //буфер заголовка нового файла            
            // генерация заголовка файла            
            DataLenArray = new byte[WavHeaderSize];// + WavHeaderBodyLenghSize];
            //DataLenArray.CopyTo(SoundBuffHeader, 0);
            DataLenArray = SoundBuffHeader;
            byte[] soundsize = BitConverter.GetBytes(SoundLength); int kpos = 0;
            byte[] ssz = new byte[WavHeaderBodyLenghSize];
            int g=3;
            for (int i = soundsize.Length - 1; i >= 0; i--)
            {
                ssz[g] = soundsize[i]; g--;
            }
            while (g >= 0) { ssz[g] = 0; g--; }
            //Запись заголовка в проигрываемый файл
            Player.Stream.Position = 0;
            Player.Stream.Write(DataLenArray, 0, DataLenArray.Length);
            //запись размера тела в проигрываемый файл
            Player.Stream.Position = DataLenArray.Length;
            Player.Stream.Write(ssz, 0, WavHeaderBodyLenghSize);
            byte[] test = new byte[SoundLength];  //генерация самого тела            
            int pos = 0;
            for (int i = 0; i < Sounds.Count; i++)
            {
                byte[] temps = (byte[])Sounds[i];
                for (int j = 0; j < temps.Length; j++)
                {
                    test[pos] = temps[j]; pos++;
                }
            }
            //запись тела
            Player.Stream.Position = WavHeaderSize + WavHeaderBodyLenghSize;
            Player.Stream.Write(test, 0, test.Length);
            Player.Stream.Position = 0;
            Player.Load();            
            Player.Play();
        }
        //Остановка плеера
        public void StopPlaying()
        {
            Player.Stop();
        }
    }
}



а вот код основного тела программы(не ругайтесь на ифы, так читабельнее, а потом ифы заменю на case)
Код

bool isRusChar(char ch)
        {
            if (ch == 'а') { return true; }
            if (ch == 'б') { return true; }
            if (ch == 'в') { return true; }
            if (ch == 'г') { return true; }
            if (ch == 'д') { return true; }
            if (ch == 'е') { return true; }
            if (ch == 'ё') { return true; }
            if (ch == 'ж') { return true; }
            if (ch == 'з') { return true; }
            if (ch == 'и') { return true; }
            if (ch == 'й') { return true; }
            if (ch == 'к') { return true; }
            if (ch == 'л') { return true; }
            if (ch == 'м') { return true; }
            if (ch == 'н') { return true; }
            if (ch == 'о') { return true; }
            if (ch == 'п') { return true; }
            if (ch == 'р') { return true; }
            if (ch == 'с') { return true; }
            if (ch == 'т') { return true; }
            if (ch == 'у') { return true; }
            if (ch == 'ф') { return true; }
            if (ch == 'х') { return true; }
            if (ch == 'ц') { return true; }
            if (ch == 'ч') { return true; }
            if (ch == 'ш') { return true; }
            if (ch == 'щ') { return true; }
            if (ch == 'ь') { return true; }
            if (ch == 'ы') { return true; }
            if (ch == 'ъ') { return true; }
            if (ch == 'э') { return true; }
            if (ch == 'ю') { return true; }
            if (ch == 'я') { return true; }
            if (ch == 'А') { return true; }
            if (ch == 'Б') { return true; }
            if (ch == 'В') { return true; }
            if (ch == 'Г') { return true; }
            if (ch == 'Д') { return true; }
            if (ch == 'Е') { return true; }
            if (ch == 'Ё') { return true; }
            if (ch == 'Ж') { return true; }
            if (ch == 'З') { return true; }
            if (ch == 'И') { return true; }
            if (ch == 'Й') { return true; }
            if (ch == 'К') { return true; }
            if (ch == 'Л') { return true; }
            if (ch == 'М') { return true; }
            if (ch == 'Н') { return true; }
            if (ch == 'О') { return true; }
            if (ch == 'П') { return true; }
            if (ch == 'Р') { return true; }
            if (ch == 'С') { return true; }
            if (ch == 'Т') { return true; }
            if (ch == 'У') { return true; }
            if (ch == 'Ф') { return true; }
            if (ch == 'Х') { return true; }
            if (ch == 'Ц') { return true; }
            if (ch == 'Ч') { return true; }
            if (ch == 'Ш') { return true; }
            if (ch == 'Щ') { return true; }
            if (ch == 'Ь') { return true; }
            if (ch == 'Ы') { return true; }
            if (ch == 'Ъ') { return true; }
            if (ch == 'Э') { return true; }
            if (ch == 'Ю') { return true; }
            if (ch == 'Я') { return true; }
            return false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            string word="";                                   
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                if (!isRusChar(textBox1.Text[i]))
                {
                    //обработка слова
                    //version 1  
                    ArrayList track = new ArrayList();
                    for (int j = 0; j < word.Length; j++)
                    {
                        char ch = word[j];
                        if (ch == 'а') { track.Add("E:\\media\\media\\Voice1\\1.wav"); }
                        if (ch == 'б') { track.Add("E:\\media\\media\\Voice1\\2.wav"); }
                        if (ch == 'в') { track.Add("E:\\media\\media\\Voice1\\3.wav"); }
                        if (ch == 'г') { track.Add("E:\\media\\media\\Voice1\\4.wav"); }
                        if (ch == 'д') { track.Add("E:\\media\\media\\Voice1\\5.wav"); }
                        if (ch == 'е') { track.Add("E:\\media\\media\\Voice1\\6.wav"); }
                        if (ch == 'ё') { track.Add("E:\\media\\media\\Voice1\\7.wav"); }
                        if (ch == 'ж') { track.Add("E:\\media\\media\\Voice1\\8.wav"); }
                        if (ch == 'з') { track.Add("E:\\media\\media\\Voice1\\9.wav"); }
                        if (ch == 'и') { track.Add("E:\\media\\media\\Voice1\\10.wav"); }
                        if (ch == 'й') { track.Add("E:\\media\\media\\Voice1\\11.wav"); }
                        if (ch == 'к') { track.Add("E:\\media\\media\\Voice1\\12.wav"); }
                        if (ch == 'л') { track.Add("E:\\media\\media\\Voice1\\13.wav"); }
                        if (ch == 'м') { track.Add("E:\\media\\media\\Voice1\\14.wav"); }
                        if (ch == 'н') { track.Add("E:\\media\\media\\Voice1\\15.wav"); }
                        if (ch == 'о') { track.Add("E:\\media\\media\\Voice1\\16.wav"); }
                        if (ch == 'п') { track.Add("E:\\media\\media\\Voice1\\17.wav"); }
                        if (ch == 'р') { track.Add("E:\\media\\media\\Voice1\\18.wav"); }
                        if (ch == 'с') { track.Add("E:\\media\\media\\Voice1\\19.wav"); }
                        if (ch == 'т') { track.Add("E:\\media\\media\\Voice1\\20.wav"); }
                        if (ch == 'у') { track.Add("E:\\media\\media\\Voice1\\21.wav"); }
                        if (ch == 'ф') { track.Add("E:\\media\\media\\Voice1\\22.wav"); }
                        if (ch == 'х') { track.Add("E:\\media\\media\\Voice1\\23.wav"); }
                        if (ch == 'ц') { track.Add("E:\\media\\media\\Voice1\\24.wav"); }
                        if (ch == 'ч') { track.Add("E:\\media\\media\\Voice1\\25.wav"); }
                        if (ch == 'ш') { track.Add("E:\\media\\media\\Voice1\\26.wav"); }
                        if (ch == 'щ') { track.Add("E:\\media\\media\\Voice1\\27.wav"); }
                        if (ch == 'ы') { track.Add("E:\\media\\media\\Voice1\\28.wav"); }
                        if (ch == 'э') { track.Add("E:\\media\\media\\Voice1\\29.wav"); }
                        if (ch == 'ю') { track.Add("E:\\media\\media\\Voice1\\30.wav"); }
                        if (ch == 'я') { track.Add("E:\\media\\media\\Voice1\\31.wav"); }
                        if (ch == 'А') { track.Add("E:\\media\\media\\Voice1\\1.wav"); }
                        if (ch == 'Б') { track.Add("E:\\media\\media\\Voice1\\2.wav"); }
                        if (ch == 'В') { track.Add("E:\\media\\media\\Voice1\\3.wav"); }
                        if (ch == 'Г') { track.Add("E:\\media\\media\\Voice1\\4.wav"); }
                        if (ch == 'Д') { track.Add("E:\\media\\media\\Voice1\\5.wav"); }
                        if (ch == 'Е') { track.Add("E:\\media\\media\\Voice1\\6.wav"); }
                        if (ch == 'Ё') { track.Add("E:\\media\\media\\Voice1\\7.wav"); }
                        if (ch == 'Ж') { track.Add("E:\\media\\media\\Voice1\\8.wav"); }
                        if (ch == 'З') { track.Add("E:\\media\\media\\Voice1\\9.wav"); }
                        if (ch == 'И') { track.Add("E:\\media\\media\\Voice1\\10.wav"); }
                        if (ch == 'Й') { track.Add("E:\\media\\media\\Voice1\\11.wav"); }
                        if (ch == 'К') { track.Add("E:\\media\\media\\Voice1\\12.wav"); }
                        if (ch == 'Л') { track.Add("E:\\media\\media\\Voice1\\13.wav"); }
                        if (ch == 'М') { track.Add("E:\\media\\media\\Voice1\\14.wav"); }
                        if (ch == 'Н') { track.Add("E:\\media\\media\\Voice1\\15.wav"); }
                        if (ch == 'О') { track.Add("E:\\media\\media\\Voice1\\16.wav"); }
                        if (ch == 'П') { track.Add("E:\\media\\media\\Voice1\\17.wav"); }
                        if (ch == 'Р') { track.Add("E:\\media\\media\\Voice1\\18.wav"); }
                        if (ch == 'С') { track.Add("E:\\media\\media\\Voice1\\19.wav"); }
                        if (ch == 'Т') { track.Add("E:\\media\\media\\Voice1\\20.wav"); }
                        if (ch == 'У') { track.Add("E:\\media\\media\\Voice1\\21.wav"); }
                        if (ch == 'Ф') { track.Add("E:\\media\\media\\Voice1\\22.wav"); }
                        if (ch == 'Х') { track.Add("E:\\media\\media\\Voice1\\23.wav"); }
                        if (ch == 'Ц') { track.Add("E:\\media\\media\\Voice1\\24.wav"); }
                        if (ch == 'Ч') { track.Add("E:\\media\\media\\Voice1\\25.wav"); }
                        if (ch == 'Ш') { track.Add("E:\\media\\media\\Voice1\\26.wav"); }
                        if (ch == 'Щ') { track.Add("E:\\media\\media\\Voice1\\27.wav"); }
                        if (ch == 'Ы') { track.Add("E:\\media\\media\\Voice1\\28.wav"); }
                        if (ch == 'Э') { track.Add("E:\\media\\media\\Voice1\\29.wav"); }
                        if (ch == 'Ю') { track.Add("E:\\media\\media\\Voice1\\30.wav"); }
                        if (ch == 'Я') { track.Add("E:\\media\\media\\Voice1\\31.wav"); }                        
                    }
                    AudioWAV WordWAV = new AudioWAV(track);
                    WordWAV.PlaySound();
                    Thread.Sleep(3000);
                    //
                    Thread.Sleep(200);                    
                    word = "";
                    continue;
                }                
                word+= textBox1.Text[i];                              
            }
            button1.Enabled = true;
        }    


Этот вариант полностью работает, все ошибки устранил

Это сообщение отредактировал(а) Ivankult - 15.12.2009, 22:02
--------------------
Стив Макконнелл: «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
PM MAIL ICQ   Вверх
Экскалупатор
Дата 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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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