Audio android上声音播放器的改进

Audio android上声音播放器的改进,audio,media,playback,assets,piano,Audio,Media,Playback,Assets,Piano,我正在尝试制作一个简单的钢琴应用程序。我找到了这个教程 我下载了这个链接上的文件并导入了它。我运行这个应用程序,上面有4个按钮,可以播放4个不同的笔记,这些笔记加载到资产文件中 然后我试图修改这个项目来制作一个钢琴应用程序 首先,我从xml中删除了这些红色按钮 我在背景上加了一个钢琴图像 然后我在每个键上创建了按钮 xml文件为 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:

我正在尝试制作一个简单的钢琴应用程序。我找到了这个教程

我下载了这个链接上的文件并导入了它。我运行这个应用程序,上面有4个按钮,可以播放4个不同的笔记,这些笔记加载到资产文件中

然后我试图修改这个项目来制作一个钢琴应用程序

首先,我从xml中删除了这些红色按钮

我在背景上加了一个钢琴图像

然后我在每个键上创建了按钮

xml文件为

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="fill_vertical"
    android:background="@drawable/images"
    android:orientation="vertical" >

    <Button
        android:id="@+id/buttonC4"
        android:layout_width="294dp"
        android:layout_height="60dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonD4"
        android:layout_width="294dp"
        android:layout_height="60dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonE4"
        android:layout_width="294dp"
        android:layout_height="60dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonF4"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />


    <Button
        android:id="@+id/buttonG4"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonA4"
        android:layout_width="294dp"
        android:layout_height="60dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonB4"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
         android:id="@+id/buttonC5"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

    <Button
        android:id="@+id/buttonD5"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />


    <Button
        android:id="@+id/buttonE5"
        android:layout_width="294dp"
        android:layout_height="58dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical|center_horizontal" />

</LinearLayout>
然后我换了音轨课。我将格式更改为wav文件

public void run()
    {
        try
        {
            String path = note + ".wav";
其他所有内容与原始项目中的内容相同

但是这个应用程序不能正常工作

当我运行该应用程序并单击某个键上的透明按钮时,它会播放一个声音,但声音与实际不同

听起来有些不同。我可以说是电子版的音符

当我单击其他一些键时,应用程序崩溃。它说应用程序意外停止

怎么了?我该怎么做才能让它工作?原因可能是我下载的文件。我需要找什么样的笔记?这个项目的比特数或持续时间是否有特殊格式

这对我来说非常重要,如果你可以从链接下载文件并运行,你可以看到它是如何工作的。你可以建议我修改它的方法。我希望你能帮助我。 这是logcat:

05-13 19:49:55.580: D/AndroidRuntime(485): Shutting down VM
05-13 19:49:55.580: W/dalvikvm(485): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-13 19:49:55.600: E/AndroidRuntime(485): FATAL EXCEPTION: main
05-13 19:49:55.600: E/AndroidRuntime(485): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.martinhoeller/net.martinhoeller.PianoTestActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class ButtonView
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.os.Looper.loop(Looper.java:123)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.reflect.Method.invokeNative(Native Method)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.reflect.Method.invoke(Method.java:521)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-13 19:49:55.600: E/AndroidRuntime(485):  at dalvik.system.NativeStart.main(Native Method)
05-13 19:49:55.600: E/AndroidRuntime(485): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class ButtonView
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.Activity.setContentView(Activity.java:1647)
05-13 19:49:55.600: E/AndroidRuntime(485):  at net.martinhoeller.PianoTestActivity.onCreate(PianoTestActivity.java:23)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-13 19:49:55.600: E/AndroidRuntime(485):  ... 11 more
05-13 19:49:55.600: E/AndroidRuntime(485): Caused by: java.lang.ClassNotFoundException: android.view.ButtonView in loader dalvik.system.PathClassLoader[/data/app/net.martinhoeller-1.apk]
05-13 19:49:55.600: E/AndroidRuntime(485):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createView(LayoutInflater.java:466)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
05-13 19:49:55.600: E/AndroidRuntime(485):  ... 20 more
05-13 19:52:22.293: D/AndroidRuntime(513): Shutting down VM
05-13 19:52:22.293: W/dalvikvm(513): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-13 19:52:22.309: E/AndroidRuntime(513): FATAL EXCEPTION: main
05-13 19:52:22.309: E/AndroidRuntime(513): java.lang.ArrayIndexOutOfBoundsException
05-13 19:52:22.309: E/AndroidRuntime(513):  at net.martinhoeller.PianoTestActivity.onTouchEvent(PianoTestActivity.java:66)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.app.Activity.dispatchTouchEvent(Activity.java:2089)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.os.Looper.loop(Looper.java:123)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-13 19:52:22.309: E/AndroidRuntime(513):  at java.lang.reflect.Method.invokeNative(Native Method)
05-13 19:52:22.309: E/AndroidRuntime(513):  at java.lang.reflect.Method.invoke(Method.java:521)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-13 19:52:22.309: E/AndroidRuntime(513):  at dalvik.system.NativeStart.main(Native Method)

你似乎有很多问题。让我们先尝试修复充气碰撞的布局

List<Button> buttons;
...
buttons = new ArrayList<Button>();
buttons.add((Button)findViewById(R.id.buttonC4));
buttons.add((Button)findViewById(R.id.buttonD4));
...
for (Button button : buttons) {
    button.setOnClickListener(this);
}
这将正确地转换布局的按钮视图,并为每个视图设置OnClickListener。
您的活动需要实现View.OnClickListener才能使用setOnClickListenerthis。如果将单击处理分离,则替换为相应的类。在这种情况下,该类将实现OnClickListener,而不是您的活动。

我们需要查看logcat stacktraces以了解崩溃情况以及您至少用于播放注释的方法,以提供帮助。您在版面中使用文本视图而不是按钮视图类型有什么特别的原因吗?谢谢您的评论。如何在这里添加logcat?我没有更改任何其他内容。其余代码部分与原始代码部分相同。资产文件夹中有注释文件C4.wav、E4。wav等…您试图使用一个名为ButtonView的类,但该类不存在或未正确导入到您的项目中。你确定这就是正在使用的布局吗?请从您的活动中添加onCreate。不,这是在我将每个textview更改为buttonview后发生的。谢谢,但您检查了链接吗?我快速浏览了一下,但我不打算通读整个内容,也不打算自己尝试创建一个工作实现。你需要精心设计你的问题,这样它就包含了人们帮助你所需的所有信息,而无需花费大量时间重新创建你的所有代码。清晰,简洁,完整和直接的方式。实际上,原来的项目工程,因为有4个声音文件,我只想添加3个以上,并创建一个简单的钢琴应用程序与7个音符。原来的项目4个音符正在播放,但我下载的其他3个文件没有正常播放或有时从未播放过。我刚刚添加了3个以上的原始文件。我在项目中给他们打电话,就像原来的一样。但是这三个音符听起来不像音符,它们就像汽车的喇叭。我是认真的。他们被当作别的东西来玩。我不知道为什么
05-13 19:49:55.580: D/AndroidRuntime(485): Shutting down VM
05-13 19:49:55.580: W/dalvikvm(485): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-13 19:49:55.600: E/AndroidRuntime(485): FATAL EXCEPTION: main
05-13 19:49:55.600: E/AndroidRuntime(485): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.martinhoeller/net.martinhoeller.PianoTestActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class ButtonView
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.os.Looper.loop(Looper.java:123)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.reflect.Method.invokeNative(Native Method)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.reflect.Method.invoke(Method.java:521)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-13 19:49:55.600: E/AndroidRuntime(485):  at dalvik.system.NativeStart.main(Native Method)
05-13 19:49:55.600: E/AndroidRuntime(485): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class ButtonView
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.Activity.setContentView(Activity.java:1647)
05-13 19:49:55.600: E/AndroidRuntime(485):  at net.martinhoeller.PianoTestActivity.onCreate(PianoTestActivity.java:23)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-13 19:49:55.600: E/AndroidRuntime(485):  ... 11 more
05-13 19:49:55.600: E/AndroidRuntime(485): Caused by: java.lang.ClassNotFoundException: android.view.ButtonView in loader dalvik.system.PathClassLoader[/data/app/net.martinhoeller-1.apk]
05-13 19:49:55.600: E/AndroidRuntime(485):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
05-13 19:49:55.600: E/AndroidRuntime(485):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createView(LayoutInflater.java:466)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544)
05-13 19:49:55.600: E/AndroidRuntime(485):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
05-13 19:49:55.600: E/AndroidRuntime(485):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
05-13 19:49:55.600: E/AndroidRuntime(485):  ... 20 more
05-13 19:52:22.293: D/AndroidRuntime(513): Shutting down VM
05-13 19:52:22.293: W/dalvikvm(513): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-13 19:52:22.309: E/AndroidRuntime(513): FATAL EXCEPTION: main
05-13 19:52:22.309: E/AndroidRuntime(513): java.lang.ArrayIndexOutOfBoundsException
05-13 19:52:22.309: E/AndroidRuntime(513):  at net.martinhoeller.PianoTestActivity.onTouchEvent(PianoTestActivity.java:66)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.app.Activity.dispatchTouchEvent(Activity.java:2089)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.os.Looper.loop(Looper.java:123)
05-13 19:52:22.309: E/AndroidRuntime(513):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-13 19:52:22.309: E/AndroidRuntime(513):  at java.lang.reflect.Method.invokeNative(Native Method)
05-13 19:52:22.309: E/AndroidRuntime(513):  at java.lang.reflect.Method.invoke(Method.java:521)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-13 19:52:22.309: E/AndroidRuntime(513):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-13 19:52:22.309: E/AndroidRuntime(513):  at dalvik.system.NativeStart.main(Native Method)
List<Button> buttons;
...
buttons = new ArrayList<Button>();
buttons.add((Button)findViewById(R.id.buttonC4));
buttons.add((Button)findViewById(R.id.buttonD4));
...
for (Button button : buttons) {
    button.setOnClickListener(this);
}