অ্যান্ড্রয়েড বোতামে ক্লিক করুন শব্দ


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
কাকের ডাক

উত্তর:


227

এটি মূল পোস্টে প্রদত্ত কোডের সর্বাধিক গুরুত্বপূর্ণ অংশ।

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। মিডিয়াপ্লেয়ার স্ট্যাটিক ফ্যাক্টরি পদ্ধতি ডিজাইনের প্যাটার্ন অনুসরণ করে । একটি উদাহরণ পাওয়ার জন্য, আমরা এর 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();
}

শব্দটি বাজানোর জন্য, আমরা মিডিয়াপ্লেয়ারের start()পদ্ধতিটিকে কল করি । এই পদ্ধতিটি শব্দের প্লেব্যাক শুরু করে।

সেখানে, আপনি এখন অ্যান্ড্রয়েডে বোতাম ক্লিকের শব্দ করতে পারেন!


বোনাস অংশ:

ধন্যবাদ নীচে মন্তব্যে উল্লিখিত ধন্যবাদ ল্যাঙ্গুস্টেন গুস্টেল! , এবং অ্যান্ড্রয়েড বিকাশকারী রেফারেন্সে প্রস্তাবিত হিসাবে , release()রিসোর্সগুলি মুক্ত করার জন্য পদ্ধতিটি কল করা গুরুত্বপূর্ণ যা আর ব্যবহার করা হবে না। সাধারণত, এটি করা হয়ে গেলে শব্দটি বাজানো শেষ হয়ে যায়। এটা করার জন্য, আমরা একটি অ্যাড OnCompletionListenerআমাদের কাছে mp যেমন:

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

onCompletionপদ্ধতির অভ্যন্তরে , আমরা এটির মতো প্রকাশ করি :

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

এটি বাস্তবায়নের আরও সুস্পষ্ট উপায় রয়েছে । উদাহরণস্বরূপ, আপনি মিডিয়াপ্লেয়ারকে একটি শ্রেণি পরিবর্তনশীল করতে পারেন এবং এর লাইফসাইকেলের পাশাপাশি এটি ব্যবহার করে Fragmentবা Activityএটি ব্যবহার করে handle তবে এটি অন্য প্রশ্নের জন্য একটি বিষয়। এই উত্তরের সুযোগটি ছোট রাখতে, অ্যান্ড্রয়েডের বোতামে ক্লিক করে কীভাবে সাউন্ড প্লে করা যায় তা চিত্রিত করার জন্য আমি এটি লিখেছিলাম ।


আসল পোস্ট

প্রথম। আপনার বক্তব্যগুলি একটি ব্লকের ভিতরে রাখা উচিত এবং এই ক্ষেত্রে অনক্রিয়েট পদ্ধতি।

দ্বিতীয়ত। আপনি পরিবর্তনশীল হিসাবে বোতাম সক্রিয়া এক , তাহলে আপনি একটি পরিবর্তনশীল ব্যবহৃত শূন্য এবং একটি অসম্পূর্ণ onClickListener তার onClickListener সেট। ভেরিয়েবল ব্যবহার এক 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 () {সর্বজনীন শূন্য অনক্লিক (ভি ভি) {এমপি.স্টার্ট ();}}); মিস করবেন না!
অটো

7
পেতে যাবেন নাRELEASE
ল্যাঙ্গুস্টেন গস্টেল

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();

না মিডিয়া প্লেয়ারকে প্রকাশ আপনাকে লগগিকেটে এই ত্রুটি দেয়:

অ্যান্ড্রয়েড: মিডিয়াপ্লেয়ার মুক্তি না পেয়ে চূড়ান্ত হয়েছে

পুনরায় সেট করা হচ্ছে নামিডিয়া প্লেয়ারটিকে আপনাকে লগগিকেটে এই ত্রুটি দেয়:

অ্যান্ড্রয়েড: মিডিয়াপ্লেয়ার অবিচ্ছিন্ন ইভেন্টগুলি নিয়ে চলে গেল

মিডিয়া প্লেয়ার ব্যবহার করার জন্য নিরাপদ এবং সাধারণ কোডটি খেলুন।

একই ক্রিয়াকলাপ / খণ্ডে একাধিক শব্দ বাজানোর জন্য নতুন মিডিয়া প্লেয়ারের মতো তৈরি করার সময় রেসিডটি পরিবর্তন করুন

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
দিমিত্রি

আপনার এমপি = নতুন মিডিয়াপ্লেয়ার () লাইনটি লাগবে না কারণ আপনি পরবর্তী লাইনে মিডিয়াপ্লেয়ার.ক্রিয়েট (...) ব্যবহার করে এটি আবার শুরু করছেন।
কেলে

6
  • অডিওটি অবশ্যই স্থাপন করতে হবে raw ফোল্ডারে , যদি এটি বিদ্যমান না থাকে তবে একটি তৈরি করুন।
  • কাঁচা ফোল্ডারটি অবশ্যই রেস ফোল্ডারের ভিতরে থাকতে হবে
  • নামটিতে অবশ্যই কোনও -বা বিশেষ অক্ষর নেই।

আপনার ক্রিয়াকলাপে, আপনার পদ্ধতি বা পদ্ধতির MediaPlayerঅভ্যন্তরে আপনার কোনও অবজেক্ট থাকা দরকার , আপনার পছন্দ মতো আপনার অডিও ফাইলটি কল করার জন্য বাজানোর জন্য প্রস্তুত করা উচিত , যেহেতু আপনি এটি চান একটি বোতামে রাখা, আপনি এটি পদ্ধতির ভিতরে রাখতে হবে ।onCreateonclickMediaPlayerMediaPlayer.create(this, R.raw.name_of_your_audio_file)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();

    }

একটি পদ্ধতিতে একটি বোতাম তৈরি করতে বোতাম টিপানো যেতে পারে (অনক্রিট),

তারপরে আপনার ফাইলের পথ দিয়ে (মিডিয়াপ্লেয়ার) শ্রেণীর জন্য একটি ভেরিয়েবল তৈরি করুন

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

অবশেষে class শ্রেণিতে শুরু করার পদ্ধতিটি চালান

mp.start();

বোতাম টিপলে ফাইলটি চলবে, আশা করি এটি সহায়ক ছিল!


3
স্ট্যাক ওভারফ্লোতে স্বাগতম! আপনার কোডটিতে কিছু ব্যাখ্যা এবং মন্তব্য যুক্ত করা ভাল হলে ভবিষ্যতে পাঠকরা আপনার কাছ থেকে শিখতে পারেন এটি আরও ভাল।
মেহেদী বাউনিয়া

1

ডেথআর দ্বারা প্রস্তাবিত হিসাবে এটি পুনরায় সেট করার পরিবর্তে:

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

আমরা কেবল মিডিয়াপ্লেয়ারটিকে এটি ব্যবহার শুরু করতে পুনরায় সেট করতে পারি:

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

1

এই সমস্ত সমাধানগুলি "সাউন্ড" সুন্দর এবং যুক্তিসঙ্গত তবে এর মধ্যে রয়েছে একটি বিরাট ক্ষতি। যদি আপনার গ্রাহক আপনার অ্যাপ্লিকেশনটি ডাউনলোড করে এবং আপনার বোতামটি বারবার টিপায় তবে কি হবে?

তোমার MediaPlayer কখনো কখনো আপনার শব্দ খেলা যদি আপনি অনেকবার বাটন ক্লিক ব্যর্থ হবে।

MediaPlayerকিছুদিন আগে ক্লাস নিয়ে এই পারফরম্যান্স সমস্যায় পড়েছিলাম ।

MediaPlayerক্লাসটি কি ব্যবহারের জন্য সংরক্ষণ করা যায়? সবসময় না। আপনার যদি সংক্ষিপ্ত শব্দ হয় তবে SoundPoolক্লাসটি ব্যবহার করা ভাল ।

একটি সাশ্রয় এবং দক্ষ সমাধান হ'ল সাউন্ডপুল ক্লাস যা দুর্দান্ত বৈশিষ্ট্যগুলি সরবরাহ করে এবং আপনার অ্যাপ্লিকেশনটির কার্যকারিতা বৃদ্ধি করে।

সাউন্ডপুল MediaPlayerক্লাসের মতো ব্যবহার করা সহজ নয় তবে এটি কার্য সম্পাদন এবং নির্ভরযোগ্যতার ক্ষেত্রে কিছু দুর্দান্ত সুবিধা রয়েছে।

এই লিঙ্কটি অনুসরণ করুন এবং আপনার অ্যাপ্লিকেশনটিতে কীভাবে সাউন্ডপুল ক্লাস ব্যবহার করবেন তা শিখুন:

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

ইউটিউব: সমাধান সংরক্ষণ করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.