HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0904
ひろ音声の再生11未解決


ひろ

リンク

2010/9/4(Sat) 23:31:36|NO.34851

ボタンを押せば、mmplayでmp3の音声を再生する
ようにしたのですが、再生中にボタンを数回連打
するとパソコンが固まってしまいます。どすれば
よいか、どなたか教えていただけませんか。



この記事に返信する


check

リンク

2010/9/4(Sat) 23:35:58|NO.34852

連続で無駄に再生させようとしているからじゃ?
一度mmstopでとめるか、再生しているときはボタンを押しても再生
しないようにifで分岐すればいいんじゃない?
これ以上は情報が少なくてなんともいえないな。



Sucret

リンク

2010/9/5(Sun) 14:51:49|NO.34858

check様のおっしゃる通り、その情報量では状況が把握できず返答しかねます。

まず、mp3の再生とはミュージックプレイヤーのようなものを作成していて
ボタンを連打されることを意図していないのか
あるいは曲のある位置から連続的に短時間再生を繰り返したいのかなど、
何をどうしたいのかを教えていただけないでしょうか?

私達が答えられる質問でも聞き方次第で答えられなくなる場合もあります。
それはお互いが意図しない状況ですので、もう少し詳しく状況を教えていただけないでしょうか?
スクリプトを投稿するというのも一種の手だと思います。

拙い文章で申し訳ございません。それでは失礼します。



ひろ

リンク

2010/9/5(Sun) 16:03:10|NO.34859

お世話になります。
私が作っているのは、概略ですが、短い1行の文が500個(500行)あって、
1行目の文を表示したとき、ボタンを押せば、その音声を聞ける。
2行目の文を表示したとき、ボタンを押せば、その音声が聞ける。
というようなものです。
ボタンからまっすぐ*otoに飛ばないようにしているのは、*onseiwokiku
のところで*otoに飛ぶか飛ばないか条件わけをしたり、その他の処理を
するからです。スクリプトの概略は以下の通りです。
b=0のとき1行目の文を表示させて、a001を再生する、といった具合です。
よろしくお願いします。
(ボタンを連打しなければ、何回でも正常に再生されます)


button "ONSEI",*onseiwokiku *onseiwokiku gosub *oto stop *oto if b=0 : mmload "folder1\\a001.mp3",listen : mmplay listen if b=1 : mmload "folder1\\a002.mp3",listen : mmplay listen if b=2 : mmload "folder1\\a003.mp3",listen : mmplay listen if b=3 : mmload "folder1\\a004.mp3",listen : mmplay listen return



check

リンク

2010/9/5(Sun) 20:18:44|NO.34867

どうやら俺のレスは無視されたようだな。



ひろ

リンク

2010/9/6(Mon) 18:33:05|NO.34887

checkさん、ごめんなさい。未熟なために、「再生しているときは、
ボタンを押しても再生しないようにifで分岐する」方法が分からな
かったので、返答できませんでした。今日わかったのですが、3台
のパソコンで試した結果、連打して固まるのは私のパソコンだけで
した。私のパソコンは最近遅くなったような気がしていました。で
きたら、私のパソコンが悪いのか、上記のようなスクリプトの書き
方(500個の音声を再生するのに500行も書いている)がそも
そもまずいのか教えていただけませんか。



SYAM

リンク

2010/9/6(Mon) 18:58:15|NO.34891

見たところ、これだけだったら連打で固まるスクリプトに見えないです。
あまりいいスクリプトでないことは確かですが…。


さしあたって、

if b=0 : mmload "folder1\\a001.mp3",listen : mmplay listen

のところを、b が想定の範囲内にあることを if で確認してから


mmload strf("folder1\\a%03d.mp3", b+1),listen : mmplay listen

のようにすると500行も書かなくてよくなります。
※当然、500回の if も実行されなくなりプログラムが軽くもなります
strf()関数についてはヘルプを参照してください。



SYAM

リンク

2010/9/6(Mon) 19:00:32|NO.34892

↑がどう動くのか分かるサンプルもついでに置いときますね

repeat 10 b=cnt mes strf("folder1\\a%03d.mp3", b+1) loop



ひろ

リンク

2010/9/8(Wed) 20:14:41|NO.34914

SYAMさんありがとうございました。未熟なため、教えてくださったことを
理解するのに時間がかかってしまいましたが、なんとかできそうです。
ひとつだけ教えてください。¥が2個から1個に減ってしまうのですが、
どうしたら2個になりますか。よろしくお願いします。



ext

リンク

2010/9/8(Wed) 20:27:57|NO.34915

単純に

mes "\\\\"



SYAM

リンク

2010/9/8(Wed) 21:48:23|NO.34917

\ を2個にしたい…と仰っているあたり、もしかしたら \\ と書く理由を誤解しているのではありませんか?


スクリプト内で文字列を書く場合、 "" で囲むというのはお分かりだと思います。
たとえば その中に 改行 を入れたい場合は、 "\n" と書くと改行になります。他、いくつかの「特殊文字」を表すのに 文字列の中に "\"に続けてアルファベットを書くことがあります。

で、そうすると 「\」をそのまま文字列に含めたい場合に困りますから、 "\\" は「\」扱いになるようになっています。
つまり、HSPのスクリプトに

"aaaaa\\aaaaa"
と書いたら、それは「aaaaa\aaaaa」という文字列データを表しています。

また、

"aaaaa\naaaaa"
と書いたら、それは
「aaaaa
aaaaa」という文字列データを表しています。 "\n"は改行を表しているわけです。

で、もひとつ最後に

"aaaaa\\naaaaa"
と書いた場合。
「aaaaa\naaaaa」という文字列データになることがわかれば、OKです。



SYAM

リンク

2010/9/9(Thu) 10:43:19|NO.34919

元のスクリプトとの関連について触れてなかったので追記。
先の投稿の内容をふまえるとわかると思いますが、元のスクリプトで

mmload "folder1\\a001.mp3"
…と書いてある部分で mmload に指定している文字列の(実際の)データは「folder1\a001.mp3」です。つまり、¥は1つですね。
それを表現するために "folder1\\a001.mp3"と表記していたのです。

なので、 \が一つ減る…ということが起きているわけでは、ないわけです。



ONION software Copyright 1997-2021(c) All rights reserved.