Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Мускул
0 / 0 / 0
Регистрация: 23.06.2018
Сообщений: 13
1

Ускорить загрузку звукового файла и его воспроизведение

02.07.2018, 20:16. Просмотров 739. Ответов 3
Метки нет (Все метки)

Добрый день всем!
Начал осваивать Delphi 7 и возник вопрос по работе со звуком.
Хочу сделать небольшую программу, которая выводит небольшой текст на экран и одновременно воспроизводит звук (секунд 5-6), потом небольшая (пара секунд) пауза, опять текст (другой) и звук (другой) и так раз 20-30.
Оформил всё (тексты и имена wav-файлов) динамическими массивами.
Вроде работает, но иногда звук (особенно в начале, иногда в середине, тормозит).
Насколько я понимаю, функция PlaySound(Pchar(FileName),0,snd_sync) на каждом шаге извлекает имя файла из массива, загружает файл в оперативную память и воспроизводит его.

Вопрос: А можно сделать так, чтобы в начале все 20-30-40 текстов и соответствующих WAV-файлов были загружены в оперативную память и, потом, при работе цикла сразу воспроизводились?
Как их загрузить и потом в цикле ссылаться на них?
Тогда звук должен будет меньше тормозить.

Привожу кусок программы:
Delphi
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, mmsystem;
...
var
  Form1: TForm1;
  num, i1  : Integer;  // Количество строк 
  Start:Word = 0;      // Счетчик фраз внутренний 
  tRu, zRu : array of String;  // Динамические массивы   
  Btn_Pauza, Btn_End : Boolean; //Переменные-"флажки" для определения "нажата ли кнопка?"
  FileName, DirFile: String;
...
procedure VvodMassiva;  // ввод динамических массивов
...
procedure TForm1.Button1Click(Sender: TObject);   // Загрузить файл в Memo1 ...    
begin
  if OpenDialog1.Execute then // Загрузка файла в Memo
      Form1.Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
  DirFile:=ExtractFilePath(OpenDialog1.FileName); 
  VvodMassiva;
  Form1.Memo1.Lines.Clear; // Очищаем Memo после
  Form1.Label2.Caption:='Файл загружен"';
  Application.ProcessMessages;
end;
 
procedure TForm1.Button3Click(Sender: TObject); // Запустить 
 
var            k : word;
    FileName : String; // Имя воспроизводимого файла
 
begin
  Btn_End:=False;    // Убираем завершение 
  Btn_Pauza:=False;  // Убираем паузу
     for k:=Start to num-1 do   // Циклимся со значения Start до num-1
       begin
          if Btn_End then     // Завершение урока
              begin
                ...
              end;
          if Btn_Pauza then    // Приостановка цикла
                begin
                    ...
                end;   
          Form1.Label1.Caption:= tRu[k]; // выводим текст
          Application.ProcessMessages;
 
          FileName:=DirFile+zRu[k];  // Получаем полное имя файла
          PlaySound(Pchar(FileName),0,snd_sync);    // воспроизводим звук
          Application.ProcessMessages;
          Sleep(2000);
       end; // for k:=Start to num   
end; // procedure
 
procedure TForm1.Button4Click(Sender: TObject); // Приостановить цикл
begin
  Btn_Pauza := True;
end;
 
procedure TForm1.Button5Click(Sender: TObject); // Завершить цикл
begin
  Btn_End := True; 
end;
 
end.
Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2018, 20:16
Ответы с готовыми решениями:

Воспроизведение звукового файла, через устройство воспроизведения (не по умолчанию)
Здравствуйте! Если кто поможет, буду весьма благодарен ) Мне нужно...

Остановка проигрывания звукового файла
Здравствуйте. Подскажите пожалуйста: При входе в программу у меня должен...

Удаление содержимого звукового файла
у меня есть файл (wav или mp3). мне нужно при нажатии на кнопку удалить...

Нарисовать спектр звукового wav файла
Доброго времени суток! Подскажите пожалуйста! Мне необходимо на основании...

Реализовать захват звука с микрофона и его воспроизведение
Мне необходимо реализовать захват звука с микрофона и его воспроизведение....

3
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
02.07.2018, 23:04 2
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

вопроизводить wav файлы это вообще не самая лучшая идея
playSound не сгодится ни для чего относительно стоящего
более полезно загрузить и посмотреть примеры BASS.DLL
там все попроще будет
а массивы они массивы и есть, сгодятся и там

тем более ваш цикл с ProcessMessages это антипример
http://www.cyberforum.ru/blogs/469693/blog4909.html
1
Мускул
0 / 0 / 0
Регистрация: 23.06.2018
Сообщений: 13
03.07.2018, 04:56  [ТС] 3
Спасибо за ответ.
То есть, советуете подключить библиотеку Bass и работать, например, с mp3-файлами.
0
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
03.07.2018, 08:36 4
да.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2018, 08:36

Воспроизведение Mp3 файла
MediaPlayer2.Wait := False; MediaPlayer2.DeviceType := dtAutoSelect; ...

Воспроизведение аудиопотока из AVI файла
Пытаюсь воспроизвестм звук так ...

Media Player воспроизведение файла - доступ к приложению
Здравствуйте. Такая проблема: для воспроизведения wav-файла я использую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru