Note that there are some explanatory texts on larger screens.

plurals
  1. POSaving android specific button sound
    text
    copied!<p>I have a soundboard and I am trying to save sounds as a ringtone or notification but it is saving the same sound each time which I think is being pulled from " here can anyone shed some light? Thinking it needs to change R.raw.sound1 so it pulls in the sound of which ever button is clicked to bring up the context menu.</p> <p>I've added the loop and integrs code which makes the buttons work just in case.</p> <p>EDIT FULL CODE - Error: selectedSoundId cannot be resolved<br> :- for each three bits of code that say selectedSoundId </p> <p>Not sure if I have done this bit: Where and how do I add this?</p> <p>The "int selectedSoundId" should be declared as a class field, to make it accessible in every class method.</p> <pre><code>public class Soundboard extends Activity { private SoundManager mSoundManager; /** Called when the activity is first created. */ int selectedSoundId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.soundboard); final MediaPlayer player = new MediaPlayer(); final Resources res = getResources(); //just keep them in the same order, e.g. button01 is tied to backtoyou final int[] buttonIds = { R.id.backdoors etc}; final int[] soundIds = { R.raw.back_doors etc }; View.OnClickListener listener = new View.OnClickListener() { public void onClick(View v) { //find the index that matches the button's ID, and then reset //the MediaPlayer instance, set the data source to the corresponding //sound effect, prepare it, and start it playing. for(int i = 0; i &lt; buttonIds.length; i++) { if(v.getId() == buttonIds[i]) { selectedSoundId = soundIds[i]; AssetFileDescriptor afd = res.openRawResourceFd(soundIds[i]); player.reset(); try { player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { player.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } player.start(); break; } } } }; //set the same listener for every button ID, no need //to keep a reference to every button for(int i = 0; i &lt; buttonIds.length; i++) { Button soundButton = (Button)findViewById(buttonIds[i]); registerForContextMenu(soundButton); soundButton.setOnClickListener(listener); } } @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Save as..."); menu.add(0, v.getId(), 0, "Ringtone"); menu.add(0, v.getId(), 0, "Notification"); } @Override public boolean onContextItemSelected(MenuItem item) { if(item.getTitle()=="Ringtone"){function1(item.getItemId());} else if(item.getTitle()=="Notification"){function2(item.getItemId());} else {return false;} return true; } public void function1(int id){ if (savering(selectedSoundId)){ // Code if successful Toast.makeText(this, "Saved as Ringtone", Toast.LENGTH_SHORT).show(); } else { // Code if unsuccessful Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); } } public void function2(int id){ if (savenot(selectedSoundId)){ // Code if successful Toast.makeText(this, "Saved as Notification", Toast.LENGTH_SHORT).show(); } else { // Code if unsuccessful Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); } } //Save into Ring tone Folder public boolean savering(int ressound){ byte[] buffer=null; InputStream fIn = getBaseContext().getResources().openRawResource(ressound); int size=50; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path="/sdcard/media/audio/ringtones/"; String filename="ohhh"+".ogg"; boolean exists = (new File(path)).exists(); if (!exists){new File(path).mkdirs();} FileOutputStream save; try { save = new FileOutputStream(path+filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block return false; } catch (IOException e) { // TODO Auto-generated catch block return false; } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "Ohhh Ringtone"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); values.put(MediaStore.Audio.Media.ARTIST, "weee"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); values.put(MediaStore.Audio.Media.IS_ALARM, true); values.put(MediaStore.Audio.Media.IS_MUSIC, false); //Insert it into the database this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); return true; } //Save in Notification Folder public boolean savenot(int ressound){ byte[] buffer=null; InputStream fIn = getBaseContext().getResources().openRawResource(ressound); int size=0; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path="/sdcard/media/audio/notifications/"; String filename="ohhh"+".ogg"; boolean exists = (new File(path)).exists(); if (!exists){new File(path).mkdirs();} FileOutputStream save; try { save = new FileOutputStream(path+filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block return false; } catch (IOException e) { // TODO Auto-generated catch block return false; } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "Ohhh Notification"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); values.put(MediaStore.Audio.Media.ARTIST, "weee"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); values.put(MediaStore.Audio.Media.IS_ALARM, true); values.put(MediaStore.Audio.Media.IS_MUSIC, false); //Insert it into the database this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); return true; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload