बटन पर ध्वनि चलाएं Android क्लिक करें


109

क्लिक करने पर मुझे कच्चे से ध्वनि चलाने के लिए बटन कैसे मिलेगा? मैंने सिर्फ आईडी के साथ एक बटन बनाया है button1, लेकिन मैं जो भी कोड लिखता हूं, वह सब गलत है।

import android.media.MediaPlayer;

public class BasicScreenActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);
    }

    Button one = (Button)this.findViewById(R.id.button1);
    MediaPlayer = mp;
    mp = MediaPlayer.create(this, R.raw.soho);
    zero.setOnCliclListener(new View.OnClickListener() )

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.basic_screen, menu);
        return true;
    }



}

आप शायद संसाधनों को स्वचालित रूप से प्रबंधित करना चाहते हैं, ताकि आप कॉल कर सकें MusicManager.getInstance().play(this, R.raw.my_sound);। यदि हां, तो यह पुस्तकालय आपके लिए हो सकता है: github.com/delight-im/Android-Audio
caw

जवाबों:


228

मूल पोस्ट में प्रदान किए गए कोड में यह सबसे महत्वपूर्ण हिस्सा है।

Button one = (Button) this.findViewById(R.id.button1);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        mp.start();
    }
});

इसे चरण दर चरण समझाने के लिए:

Button one = (Button) this.findViewById(R.id.button1);

सबसे पहले बटन के इनिशियलाइज़ेशन का उपयोग ध्वनि बजाने में किया जाता है। हम उस गतिविधि को उपयोग करते हैं findViewById, जिसे हमने उस ईद को दिया है (इस उदाहरण के मामले R.id.button1में:), उस बटन को प्राप्त करने के लिए जिसे हमें ज़रूरत है। हमने इसे Buttonइसलिए डाला ताकि हम इसे उस चर को निर्दिष्ट करना आसान बना सकें oneजिसे हम शुरू कर रहे हैं। यह बताने के लिए कि यह कैसे काम करता है, इस दायरे से बाहर है। यह एक संक्षिप्त अंतर्दृष्टि देता है कि यह कैसे काम करता है।

final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);

यह है कि कैसे एक इनिशियलाइज़ करने के लिए MediaPlayer। MediaPlayer स्टैटिक फ़ैक्टरी विधि डिज़ाइन पैटर्न का अनुसरण करता है । एक उदाहरण प्राप्त करने के लिए, हम इसकी create()विधि को कहते हैं और इसे संदर्भ और ध्वनि के संसाधन क्रमांक से खेलते हैं जिसे हम इस मामले में खेलना चाहते हैं R.raw.soho। हम इसे घोषित करते हैं final। जॉन स्कीट ने इस बात पर शानदार विवरण दिया कि हम यहां ऐसा क्यों करते हैं

one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        //code
    }
});

अंत में, हम यह निर्धारित करते हैं कि हमारा पहले का आरंभिक बटन क्या करेगा। बटन पर एक ध्वनि खेलते हैं! ऐसा करने के लिए, हम OnClickListenerअपने बटन का सेट करते हैं one। अंदर केवल एक विधि है, onClick()जिसमें बटन पर क्लिक करने के लिए क्या निर्देश होना चाहिए ।

public void onClick(View v) {
    mp.start();
}

ध्वनि चलाने के लिए, हम MediaPlayer की start()विधि कहते हैं। यह विधि ध्वनि के प्लेबैक को शुरू करती है।

वहां, अब आप एंड्रॉइड में बटन पर एक ध्वनि क्लिक कर सकते हैं!


बोनस हिस्सा:

जैसा कि नीचे टिप्पणी में उल्लेख किया गया है धन्यवाद लैंगस्टन गुस्टेल! , और जैसा कि एंड्रॉइड डेवलपर संदर्भ में अनुशंसित है , release()संसाधनों को मुक्त करने के लिए विधि को कॉल करना महत्वपूर्ण है जो अब उपयोग नहीं किया जाएगा। आमतौर पर, यह तब किया जाता है जब एक बार बजने वाली ध्वनि को बजाना पूरा कर लिया जाता है। ऐसा करने के लिए, हम OnCompletionListenerअपने जैसे को जोड़ते हैं mp :

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        //code
    }
});

onCompletionविधि के अंदर , हम इसे इस तरह जारी करते हैं:

public void onCompletion(MediaPlayer mp) {
    mp.release();
}

स्पष्ट रूप से इसे लागू करने के बेहतर तरीके हैं । उदाहरण के लिए, आप MediaPlayer को एक वर्ग चर बना सकते हैं और इसके जीवनचक्र के साथ Fragmentया Activityइसके उपयोग वाले जीवनचक्र को संभाल सकते हैं। हालाँकि, यह एक अन्य प्रश्न के लिए एक विषय है। इस उत्तर के दायरे को छोटा रखने के लिए, मैंने इसे केवल यह वर्णन करने के लिए लिखा था कि एंड्रॉइड में बटन क्लिक पर ध्वनि कैसे खेलें


मूल पोस्ट

प्रथम। आपको अपने बयानों को एक ब्लॉक के अंदर रखना चाहिए, और इस मामले में ऑनक्रिट विधि।

दूसरा। आपने बटन को वेरिएबल वन के रूप में इनिशियलाइज़ किया , फिर आपने वेरिएबल ज़ीरो का इस्तेमाल किया और उसके ऑनक्लिस्टनर को एक अधूरा ऑनक्लिक्लिस्टनर पर सेट किया। SetOnClickListener के लिए चर एक का उपयोग करें ।

तीसरा, ऑनक्लिक के अंदर ध्वनि को चलाने के लिए तर्क दें।

संक्षेप में:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class BasicScreenActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);

        Button one = (Button)this.findViewById(R.id.button1);
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
        one.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                mp.start();
            }
        });
    }
}

1
और वैसे तो इसका one.setOnClickListener (नया View.OnClickListener () {सार्वजनिक शून्य onClick (देखें v) {mp.start ();}}); याद आती है कि नहीं!
ऑटो-ड्रॉयड

7
पाने के लिए नहींRELEASE
Langusten Gustel

38

परीक्षण और काम 100%

public class MainActivity extends ActionBarActivity {
    Context context = this;
    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mp = MediaPlayer.create(context, R.raw.sound);
        final Button b = (Button) findViewById(R.id.Button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        mp = MediaPlayer.create(context, R.raw.sound);
                    } mp.start();
                } catch(Exception e) { e.printStackTrace(); }
            }
        });
    }
}

यह सब हमें करना था

if (mp.isPlaying()) {
    mp.stop();
    mp.release();
    mp = MediaPlayer.create(context, R.raw.sound);
}

यह ऑडियो रिप्ले करते समय भी काम करता है। ध्वनि बजाते समय मुझे लगता है कि mp.start () बिना किसी प्रयास / कैच और यदि ब्लॉक के काम करेगा।
खविलो

37

ऐसा करने का सबसे अच्छा तरीका यहाँ है जो मुझे लॉगकैट में एक के बाद एक मुद्दे की खोज करने के बाद मिला है

MediaPlayer mp;
mp = MediaPlayer.create(context, R.raw.sound_one);
mp.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mp.reset();
        mp.release();
        mp=null;
    }
});
mp.start();

मीडिया प्लेयर को रिलीज़ नहीं करने से आपको LogCat में यह त्रुटि मिलती है:

Android: MediaPlayer जारी किए बिना अंतिम रूप दिया गया

मीडिया प्लेयर को रीसेट नहीं करने से आपको LogCat में यह त्रुटि मिलती है:

एंड्रॉइड: मीडियाप्लेयर अनहेल्दी घटनाओं के साथ चला गया

तो मीडिया प्लेयर का उपयोग करने के लिए सुरक्षित और सरल कोड खेलें।

एक ही एक्टिविटी / फ्रैगमेंट में एक से अधिक ध्वनियों को बजाने के लिए नए मीडिया प्लेयर को बनाते समय केवल रेजिड को बदलें

mp = MediaPlayer.create(context, R.raw.sound_two);

और इसे खेलते हैं!

मज़े करो!


8
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    MediaPlayer mp;
    Button one;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mp = MediaPlayer.create(this, R.raw.soho);
        one = (Button)this.findViewById(R.id.button1);

        one.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mp.start();
            }
        });
    }
}

यहाँ परिणाम है, फिर से कुछ भी नहीं काम करता है dropbox.com/s/9xb0lzesp0ibx9z/2.jpg
दिमित्री

आपको पंक्ति mp = new MediaPlayer () की आवश्यकता नहीं है क्योंकि आप अगली पंक्ति पर MediaPlayer.create (...) का उपयोग करके इसे फिर से प्रारंभ कर रहे हैं।
कीले

6
  • ऑडियो को rawफ़ोल्डर में रखा जाना चाहिए , अगर यह मौजूद नहीं है, तो एक बनाएं।
  • कच्चे फ़ोल्डर को रिस फ़ोल्डर के अंदर होना चाहिए
  • नाम में कोई भी -या विशेष वर्ण नहीं होना चाहिए ।

आपकी गतिविधि पर, आपके पास कोई ऑब्जेक्ट होना चाहिए MediaPlayer, onCreateविधि या विधि के अंदर onclick, आपको इसे इनिशियलाइज़ करना होगा MediaPlayer, जैसे MediaPlayer.create(this, R.raw.name_of_your_audio_file), तब आपकी ऑडियो फ़ाइल ir कॉल के लिए start()आपके केस में, जिसे आप चाहते हैं, के साथ खेला जाना चाहिए। एक बटन में रखा, आपको इसे onClickविधि के अंदर रखना होगा ।

उदाहरण:

private Button myButton;
private MediaPlayer mp;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);
        mp = MediaPlayer.create(this, R.raw.gunshot);

        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();
            }
        });
}
}

3

कुछ पूर्वनिर्धारित ध्वनियाँ हैं: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING।

अच्छा!

MediaActionSound

उत्पादन ध्वनियों के लिए एक वर्ग जो मीडिया और कैमरा एपीआई द्वारा की गई विभिन्न क्रियाओं द्वारा निर्मित होता है। डॉक्स

जैसे उपयोग करें:

fun playBeepSound() {
    val sound = MediaActionSound()
    sound.play(MediaActionSound.START_VIDEO_RECORDING)
}

2
Button button1=(Button)findViewById(R.id.btnB1);
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b1);
mp1.start();
}
});

यह कोशिश करो मुझे लगता है कि यह काम करेगा


1
public class MainActivity extends AppCompatActivity {

    public void clickMe (View view) {

        MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
        mp.start();

    }

बटन दबाए जाने पर विधि के साथ एक बटन बनाया जा सकता है (onCreate),

तब (MediaPlayer) वर्ग के लिए अपनी फ़ाइल के पथ के साथ एक चर बनाएं

MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);

अंत में उस कक्षा में प्रारंभ विधि चलाएं

mp.start();

बटन दबाते ही फाइल चलेगी, आशा है कि यह मददगार था!


3
ढेर अतिप्रवाह में आपका स्वागत है! बेहतर होगा कि आप अपने कोड में कुछ स्पष्टीकरण और टिप्पणी जोड़ें ताकि भविष्य के पाठक आपसे सीख सकें।
मेहदी बाउंया

1

डेथआर द्वारा प्रस्तावित के अनुसार इसे रीसेट करने के बजाय:

if (mp.isPlaying()) {
       mp.stop();
       mp.release();
       mp = MediaPlayer.create(context, R.raw.sound);
} mp.start();

हम सिर्फ MediaPlayer को रीसेट कर सकते हैं इसे उपयोग करना शुरू कर सकते हैं:

if (mp.isPlaying()) {
       mp.seekTo(0)
}

1

ये सभी समाधान "ध्वनि" अच्छा और उचित है लेकिन एक बड़ा नकारात्मक पहलू है। यदि आपका ग्राहक आपका एप्लिकेशन डाउनलोड करता है और आपके बटन को बार-बार दबाता है तो क्या होगा?

आपका MediaPlayerकभी कभी आपके ध्वनि खेलने के लिए यदि आप कई बार करने के लिए बटन पर क्लिक करें असफल हो जायेगी।

मैं MediaPlayerकुछ दिन पहले कक्षा के साथ इस प्रदर्शन समस्या में भाग गया।

क्या MediaPlayerवर्ग उपयोग करने के लिए बचा है? हर बार नहीं। यदि आपके पास छोटी आवाजें हैं तो SoundPoolकक्षा का उपयोग करना बेहतर है ।

एक बचत और कुशल समाधान साउंडपूल वर्ग है जो शानदार सुविधाएँ प्रदान करता है और आपके आवेदन के प्रदर्शन को बढ़ाता है।

साउंडपूल को MediaPlayerकक्षा के रूप में उपयोग करना आसान नहीं है लेकिन प्रदर्शन और विश्वसनीयता की बात होने पर इसके कुछ बेहतरीन फायदे हैं।

इस लिंक का पालन करें और जानें कि आप आवेदन में साउंडपूल क्लास का उपयोग कैसे करें:

https://developer.android.com/reference/android/media/SoundPool

Youtube: समाधान सहेजें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.