Конференция "Media" » Как сделать повтор звука в компоненте MediaPlayer?
 
  • salamander © (03.02.09 17:45) [0]
    Мне нужно повторять звук при нажатии кнопки и при выборе опредленной radiobutton.
    Заранее благодарен.
  • salamander © (03.02.09 17:47) [1]
    Т.е. я выбрал нужную радиокнопку и один раз нажимаю на кнопку 'повторить' и звук должен повторяться, пока я не нажму 'стоп'
  • salamander © (03.02.09 17:47) [2]
    Т.е. я выбрал нужную радиокнопку и один раз нажимаю на кнопку 'повторить' и звук должен повторяться, пока я не нажму 'стоп'
  • Сергей М. © (03.02.09 19:29) [3]

    > Как сделать повтор звука в компоненте MediaPlayer?


    Никак.
  • salamander © (04.02.09 00:36) [4]
    А если не в компоненте?
  • {RASkov} © (04.02.09 09:37) [5]
    Посмотри на:
    http://www.delphisources.ru/pages/faq/base/infinite_play_avi.html
    Хотя не совсем понятно про "повторять звук при нажатии кнопки"
  • Дуб © (04.02.09 09:42) [6]

    > Хотя не совсем понятно про "повторять звук при нажатии кнопки"

    2 режима воспроизведения ему надо. Непрерывный и одноразовый. И чтобы их можно было менять по ходу пьесы.
  • {RASkov} © (04.02.09 10:01) [7]
    > Мне нужно повторять звук при нажатии кнопки и при выборе опредленной radiobutton

    > [6] Дуб ©   (04.02.09 09:42)

    Тогда ему необходимо в код примера по ссылке вставить первой примерно такую строку:
    if (НЕ нажата кнопка) and ((выбран НЕ определенный radiobutton) or (НЕ выбран определенный radiobutton)) then Exit;

    )
  • salamander © (04.02.09 11:51) [8]
    Я делаю проектную работу и мне надо сделать что-то вроде тюнера для гитары. Т.е. имеются звучания шести струн и я выбираю с помощью радиобаттона (всего их 6, как и струн на гитаре) нужную струну и слышится звук. Мне нужна функция повтора или что-то вроде этого. т.е. при выделении нужной струны (радиобаттона) этот звук слышился не один раз и повторялся до тех пор, пока я не отключу этот повтор.
    Я пробовал использовать repeat until, но толку мало было, звук вообще щипеть начинал.
  • Сергей М. © (04.02.09 12:54) [9]

    > salamander ©   (04.02.09 11:51) [8]


    Тебе поможет св-во Notify и событие OnNotify.

    Только какой же это тюнер ? Это просто позорная бухтелка получится)

    Тюнер должен иметь обратную связь - слушать звучание настраиваемого инструмента и подсказывать настройщику куда ему крутить вирбели..
  • salamander © (04.02.09 14:04) [10]

    > Тюнер должен иметь обратную связь - слушать звучание настраиваемого
    > инструмента и подсказывать настройщику куда ему крутить
    > вирбели..
    Солгасен)) Это просто прога для настройки гитары.

    Создаю процедуру, которая должна бесперерывно повторять звук

    procedure TForm1.MediaPlayer1Notify(Sender: TObject);
    begin
     with MediaPlayer1 do
       if NotifyValue = nvSuccessful then
       begin
         Notify := True;
         Play;
       end;
    end;



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

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     MediaPlayer1Notify();
    end;



    Возможно я не так делаю вовсе. Но разве не так вызываются процедуры?)
    Если я не прав, наверное можно забирать документы из инста))

    И насчёт свойства Notify. Честно говоря без понятия как сделать(
    Я что-то пробовал, делал событие OnNotify в MediaPlayer,  привязывал к кнопке и по нажатию кнопки ничего не происходило.
  • Сергей М. © (04.02.09 16:13) [11]

    > разве не так вызываются процедуры?


    Во-первых, это не просто регулярная процедура, а процедурный метод объекта.

    Во-вторых, если в объявлении процедуры или метода присутствуют неумалчиваемые формальные параметры, то и при их вызове должны быть указаны фактические параметры соответствующего типа. Нарушение этого соглашения при компиляции как раз и приводит к той ошибке, которую ты лицезреешь.

    procedure TForm1.MediaPlayer1Notify(Sender: TObject);

    // жирным выделен формальный параметр

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    MediaPlayer1Notify(???); // а где же соответствующий ему фактический параметр ?
    end;



    В дан случае фактическим параметром можно указать
    nil




    > наверное можно забирать документы из инста


    Смотря из какого)
    Если из арбузолитейного или заборостроительного, где Паскаль не преподают и не требуют его знания вообще, можно и не забирать.
    В противном случае следовало бы над этим серьезно призадуматься)
  • salamander © (04.02.09 16:23) [12]
    Мда, совсем я уже((
    Нет, инст нормальный, но специальность не особо затрагивает область программирования. Хотя ошибка грубая.... Впредь буду осторожен)
  • Сергей М. © (04.02.09 16:29) [13]

    > инст нормальный


    Наверно он готовит магистров гитаронастроечных наук ?
    Так ты ж его закончил уже, судя по анкете ?)
  • salamander © (04.02.09 16:37) [14]
    Все исправил, но при нажатии кнопки повторнить-повторяет только 4 раза((
    Вот весь код программы.

    unit MainUnit;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls, ExtCtrls, MMSystem, MPlayer, Buttons, ExtDlgs, jpeg,
     Menus, ComCtrls;

    type
     TForm1 = class(TForm)
       RadioGroup1: TRadioGroup;
       RadioButton1: TRadioButton;
       RadioButton2: TRadioButton;
       RadioButton3: TRadioButton;
       RadioButton4: TRadioButton;
       RadioButton5: TRadioButton;
       RadioButton6: TRadioButton;
       MediaPlayer1: TMediaPlayer;
       RadioGroup2: TRadioGroup;
       RadioButton7: TRadioButton;
       RadioButton8: TRadioButton;
       RadioButton9: TRadioButton;
       RadioButton10: TRadioButton;
       RadioButton11: TRadioButton;
       RadioButton12: TRadioButton;
       BitBtn1: TBitBtn;
       Image1: TImage;
       MainMenu1: TMainMenu;
       N1: TMenuItem;
       N2: TMenuItem;
       N3: TMenuItem;
       StatusBar1: TStatusBar;
       procedure RadioButton1Click(Sender: TObject);
       procedure RadioButton2Click(Sender: TObject);
       procedure RadioButton3Click(Sender: TObject);
       procedure RadioButton4Click(Sender: TObject);
       procedure RadioButton5Click(Sender: TObject);
       procedure RadioButton6Click(Sender: TObject);
       procedure RadioButton7Click(Sender: TObject);
       procedure RadioButton8Click(Sender: TObject);
       procedure RadioButton9Click(Sender: TObject);
       procedure RadioButton10Click(Sender: TObject);
       procedure RadioButton11Click(Sender: TObject);
       procedure RadioButton12Click(Sender: TObject);
       procedure MediaPlayer1Notify(Sender: TObject);
       procedure BitBtn1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.RadioButton1Click(Sender: TObject);
    begin
      with MediaPlayer1 do
     begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\1_E5.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
     end;
    end;

    procedure TForm1.RadioButton2Click(Sender: TObject);
    begin
     with MediaPlayer1 do
     begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\2_H4.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
    end;
    end;

    procedure TForm1.RadioButton3Click(Sender: TObject);
    begin
    with MediaPlayer1 do
     begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\3_G4.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
    end;
    end;

    procedure TForm1.RadioButton4Click(Sender: TObject);
    begin
     with MediaPlayer1 do
     begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\4_D4.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
    end;
    end;

    procedure TForm1.RadioButton5Click(Sender: TObject);
    begin
       with MediaPlayer1 do
     begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\5_A3.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
    end;
    end;

    procedure TForm1.RadioButton6Click(Sender: TObject);
    begin
        with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Ìåòàëëè÷& #229;ñêèå\6_E3.mid';
       Open;
       EndPos := TrackLength[1] div 4;
       Play;
    end;
    end;

  • salamander © (04.02.09 16:37) [15]
    procedure TForm1.RadioButton7Click(Sender: TObject);
    begin
         with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\1E5.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.RadioButton8Click(Sender: TObject);
    begin
          with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\2H4.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.RadioButton9Click(Sender: TObject);
    begin
           with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\3G4.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.RadioButton10Click(Sender: TObject);
    begin
         with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\4D4.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.RadioButton11Click(Sender: TObject);
    begin
         with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\5A3.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.RadioButton12Click(Sender: TObject);
    begin
          with MediaPlayer1 do
    begin
       FileName := 'D:\Ïðîãðàììû äëÿ ñîôòà è ò.ä\Ïðîãðàììèðî âàíèå\Delphi 7\Projects\Çâó÷àíèÿ ñòðóí\Çâó÷àíèÿ ñòðóí\Íåéëîíîâ& #251;å\6E3.mp3';
       Open;
       EndPos := TrackLength[1] div 2;
       Play;
    end;
    end;

    procedure TForm1.MediaPlayer1Notify(Sender: TObject);
    begin
     with MediaPlayer1 do
       if NotifyValue = nvSuccessful then
       begin
         Notify := True;
         Play;
       end;
    end;

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    MediaPlayer1Notify(nil);
    end;

    end.

  • salamander © (04.02.09 16:38) [16]

    > Наверно он готовит магистров гитаронастроечных наук ?Так
    > ты ж его закончил уже, судя по анкете ?)

    Нет, только на 2 курсе)
  • salamander © (04.02.09 16:38) [17]

    > Наверно он готовит магистров гитаронастроечных наук ?Так
    > ты ж его закончил уже, судя по анкете ?)

    Нет, только на 2 курсе)
  • Сергей М. © (04.02.09 16:56) [18]

    > только на 2 курсе


    Что ж тогда людям голову морочишь ?)


    > звучания шести струн и я выбираю с помощью радиобаттона
    > (всего их 6, как и струн на гитаре)



    > RadioButton12Click


    Судя по приведенному коду, у тебя аж 12 струн)

    А что это за таинственные манипуляции с EndPos ?
    И зачем повторять практически один и тот же код аж 12 раз ?
  • Сергей М. © (04.02.09 17:06) [19]
    Если отказаться от mid и mp3 в пользу wav, то гораздо проще и удобней для означенной цели использовать функцию PlaySound().
  • salamander © (04.02.09 17:12) [20]
    > Что ж тогда людям голову морочишь ?)
    НЕ охота было заполнять анкету)


    > > звучания шести струн и я выбираю с помощью радиобаттона
    > > (всего их 6, как и струн на гитаре)


    Да, у меня 12 струн. 6 звуков нейлоновых и 6 металлических.
    Насчет EndPos. Стандартный midi и mp3 издает 4 звука одной струны, а с помощью
    EndPos := TrackLength[1] div *

    midi и mp3 издают лишь один звук. Иначе говоря трэк обрезается на половину или на четверть. Вот.

    Я знаю насчет waw, но он для настройки будет не очень хорошо, ибо нота не плохо слышится.
  • salamander © (04.02.09 17:13) [21]
    Точнее наоборот плохо слышится.
  • Сергей М. © (04.02.09 17:24) [22]

    > Стандартный midi и mp3 издает 4 звука одной струны


    Они у тебя откуда взялись, эти midi и mp3 ?


    > плохо слышится


    Как запишешь, так и будет слышаться.
  • salamander © (04.02.09 17:29) [23]
    Скачал с инета)
    Возможности записать нету.
  • Сергей М. © (04.02.09 19:53) [24]

    > Скачал с инета


    Ну так и скачай оттуда же готовую программу)

    И не позорься уже: то что ты назвал "вроде тюнера", на самом деле называется камертоном.

    Так что, если  твоя т.н. "проектная работа" связана именно с тюнингом, то ты вообще копаешь не в ту сторону)
  • salamander © (05.02.09 11:14) [25]
    Я говорил уже, что ошибься в названии. И зачем мне готовую качать, если мне надо САМОМУ сделать?
  • Сергей М. © (05.02.09 12:25) [26]

    > мне надо САМОМУ сделать


    А то что для камертона нужно обязательно использовать семплированный звук, это ты тоже САМ придумал ?)
  • brother © (05.02.09 12:30) [27]
    > 6_E3.mid';

    для справки, midi не может быть эталоном звука, тк использует базу сэмплов) те на разных звуковухах будет звуать не одинаково)
    рекомендую всеж найти wave записи...
 
Конференция "Media" » Как сделать повтор звука в компоненте MediaPlayer?
Есть новые Нет новых   [134431   +11][b:0][p:0.011]