PDA

View Full Version : سوال: صدا در jpanel



mahsa f
دوشنبه 03 تیر 1392, 19:07 عصر
سلام دوستان.
من میخوام یه موزیکی رو در یک jpanel قرار بدم و در حین اجرای برنامه با مثلا true شدن یه متغیر,این موزیک play بشه.اگه کمک کنید واقعا ممنون میشم

M0TR!X
سه شنبه 04 تیر 1392, 10:20 صبح
شماره یک (http://docs.oracle.com/javase/tutorial/sound/playing.html)

دو (http://www.developer.com/java/other/article.php/2173111/Java-Sound-Playing-Back-Audio-Files-using-Java.htm)

mahsa f
چهارشنبه 05 تیر 1392, 01:14 صبح
میشه خواهش کنم کد بذارید و توضیح بدید و بگید که فایل صوتی باید با چه فرمتی باشه و کجا قرارش بدم؟
راستش خیلی زمان ندارم.اگه کمک کنید واقعا ممنون میشم

chris66001
چهارشنبه 05 تیر 1392, 07:47 صبح
میشه خواهش کنم کد بذارید و توضیح بدید و بگید که فایل صوتی باید با چه فرمتی باشه و کجا قرارش بدم؟
راستش خیلی زمان ندارم.اگه کمک کنید واقعا ممنون میشم

در JDK 7 میتونی مثل کد زیر عمل کنی فقط فرمت باید MP3 و WAV باشه .
public static synchronized void playSound(final String url) {
new Thread(new Runnable() {
// The wrapper thread is unnecessary, unless it blocks on the
// Clip finishing; see comments.
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(
Main.class.getResourceAsStream("/path/to/sounds/" + url));
clip.open(inputStream);
clip.start();
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}).start();
}


این لینکم بد نیست : http://www.jsresources.org/examples/SimpleAudioPlayer.java.html

mahsa f
چهارشنبه 05 تیر 1392, 12:27 عصر
ممنون.
میشه بگید منظورتون از url چیه؟

chris66001
پنج شنبه 06 تیر 1392, 11:46 صبح
ممنون.
میشه بگید منظورتون از url چیه؟



آدرسی هست که فایل صدا در اون قرار دارد (سعی کنید از فایل هایی با فرمت Wav استفاده کنید)

mahsa f
پنج شنبه 06 تیر 1392, 13:07 عصر
راستش من خیلی توی این چیزا مبتدی هستم و اصلا تا حالا با صدا توی هیچ زبان برنامه نویسی کار نکردم.
اگه ممکنه کامل توضیح بدید.نحوه فراخوانی این تابع رو هم لطفا مثال بزنید.
ممنون از کمکتون

chris66001
پنج شنبه 06 تیر 1392, 14:59 عصر
راستش من خیلی توی این چیزا مبتدی هستم و اصلا تا حالا با صدا توی هیچ زبان برنامه نویسی کار نکردم.
اگه ممکنه کامل توضیح بدید.نحوه فراخوانی این تابع رو هم لطفا مثال بزنید.
ممنون از کمکتون

توضیح خاصی نداره شما باید یک فایل صدا رو بخوانید که از یک اینترفیس مثل Clip استفاده میکنید در داخل این اینترفیس کلاسی برای گرفتن و خواندن وجود داره بعد از خواندن هم کافیه run بشه تا فایل پخش بشه . حالا منظور شما رو از اینکه "کامل توضیح بدید" نمیفهمم هر جاش گنگه بگید تا اون قسمتو توضیح بدم .

نحوه فراخوانی همون کد اول البته چون باید از Path استفاده میکرد برنامه رو با کمی تغییر قرار دادم که راحت تر باشه (تست کردم Mp3 رو پخش نمیکنه):
import javax.sound.sampled.*;
import java.io.*;

public class SoundPlay2 implements LineListener {
private boolean done = false;
@Override
public void update(LineEvent event) {
if(event.getType() == LineEvent.Type.STOP || event.getType() == LineEvent.Type.CLOSE) {
done = true;
}
}

public void waitonfinish() throws InterruptedException {
while(!done) {
Thread.sleep(1000);
}
}
public static void playSound(final String url) {

try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(url));
SoundPlay2 control = new SoundPlay2();
clip.addLineListener(control);
clip.open(inputStream);
clip.start();
control.waitonfinish();

} catch (LineUnavailableException | UnsupportedAudioFileException | IOException | InterruptedException e) {
System.err.println(e.getMessage());
}
}

public static void main(String[] args) {
playSound("C:\\nameFile.wav\\");
}
}

mahsa f
پنج شنبه 06 تیر 1392, 21:27 عصر
واقعا ممنون که وقت میذارید
من اینو مینویسم:
import javax.sound.sampled.*;
import java.io.*;

public class SoundPlay2 implements LineListener {
private boolean done = false;
@Override
public void update(LineEvent event) {
if(event.getType() == LineEvent.Type.STOP || event.getType() == LineEvent.Type.CLOSE) {
done = true;
}
}

public void waitonfinish() throws InterruptedException {
while(!done) {
Thread.sleep(1000);
}
}
public static void playSound(final String url) {

try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(url));
SoundPlay2 control = new SoundPlay2();
clip.addLineListener(control);
clip.open(inputStream);
clip.start();
control.waitonfinish();

} catch (LineUnavailableException | UnsupportedAudioFileException | IOException | InterruptedException e) {
System.err.println(e.getMessage());
}
}

public static void main(String[] args) {
playSound("C:\\BirdDeath.wav\\");
}
}
و این ارور رو میده و انجام نمیشه:
run:
C:\BirdDeath.wav (The system cannot find the file specified)
BUILD SUCCESSFUL (total time: 0 seconds)
من بیشتر مایلم mp3 پخش بشه.اگه لطف کنید و توی پخش mp3 کمک کنید بهتره.بازم ممنون

chris66001
پنج شنبه 06 تیر 1392, 23:46 عصر
خب این ارور میگه فایل BirdDeath.wav رو پیدا نکرده (در ریشه C)
ممکنه پیدا کرده باشه ولی فایل فرمت درستی نداشته باشه .
در مورد MP3 هم یه چیزایی پیدا کردم دارم تست میکنم .

mahsa f
جمعه 07 تیر 1392, 00:31 صبح
ممنون.اگه mp3 رو بگید عالی میشه
آخه فرمتش درسته و در دسکتاپ هم هست!

chris66001
جمعه 07 تیر 1392, 01:20 صبح
نه دیگه فایل رو باید توی C بریزید نه دسکتاپ (دسکتاپ مسیر خاص خودش رو داره که تقریبا شبیه C:\\Users\\Chris66001\\Desktop\\BirdDeath.wav\\ میشه)

chris66001
جمعه 07 تیر 1392, 02:21 صبح
1. اول یک پروژه دست کنید. مثلا : MP3
2. این رو دانلود کنید : http://www.javazoom.net/javalayer/sources/jlayer1.0.1.zip
3. حالا Unzip کنید و فولدر JLayer رو هر جایی دوست داشتی کپی کنید (فقط یادت باشه کجا کپی کردی :چشمک: ) من میگم کنار فولدر سورس پروژه کپی کنید داخلش کپی نکنید ها :لبخند:
4. سورس زیر رو بردارید و کپی کنید در کلاس Main برنامتون :


import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javazoom.jl.player.Player;

public class MP3 {
private String filename;
private Player player;

// constructor that takes the name of an MP3 file
public MP3(String filename) {
this.filename = filename;
}

public void close() { if (player != null) player.close(); }
// play the MP3 file to the sound card
public void play() {
try {
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);
player = new Player(bis);
}
catch (Exception e) {
System.out.println("Problem playing file " + filename);
System.out.println(e);
}

// run in new thread to play in background
new Thread() {
public void run() {
try { player.play(); }
catch (Exception e) { System.out.println(e); }
}
}.start();

}


// test client
public static void main(String[] args) {
String filename = "آدرس فایل ام پی تری";
MP3 mp3 = new MP3(filename);
mp3.play();

// do whatever computation you like, while music plays
int N = 4000;
double sum = 0.0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sum += Math.sin(i + j);
}
}
System.out.println(sum);

// when the computation is done, stop playing it
mp3.close();

// play from the beginning
mp3 = new MP3(filename);
mp3.play();

}

}
5. حالا نوبت اینه که ClassPath رو حلش کنید (فعلا برای NetBeans رو دارم میگم)

5.1. در منوی سمت چپ روی Libraries کلیک راست کنید .


106244

5.2. بر روی Add Jar/Folder کلیک کنید .


106245

5.3. یادتونه فولدر JLayer رو کجا کپی کردید؟؟ :لبخند: به همون جا برید و داخل آن شوید و بر روی فایل jl1.0.1 کلیک کنید تا این فایل jar اضافه بشه .


106246

6. کار تمومه حالا آدرس فایل MP3 رو در کد وارد کنید و برنامه را اجرا کنید.

منبع (http://stackoverflow.com/questions/6701262/start-and-stop-sounds-in-java?lq=1)

mahsa f
جمعه 07 تیر 1392, 14:03 عصر
واقعا ممنونم.دیشب بعد از اینکه گفتم کار نمیکنه با اینکه روی دسکتاپه,فهمیدم که اشتباهه مسیرش و درستش کردم.اما متاسفانه اینترنتم قطع شد و نتونستم سوالمو پاک کنم!درمورد پخش mp3 هم یک دنیا ازتون ممنونم.لطف کردید واقعا:لبخندساده::لبخند: