/**
 * Aeronica's mxTune MOD
 * Copyright {2016} Paul Boese aka Aeronica
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.aeronica.mods.mxtune.sound;

import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.PositionedSound;
import net.minecraft.client.audio.SoundEventAccessor;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;

import net.minecraft.client.audio.ISound.AttenuationType;

public class MusicPositioned extends PositionedSound
{

    
    SoundEventAccessor soundEventAccessor;
    
    public MusicPositioned(BlockPos pos)
    {
        super(ModSoundEvents.PCM_PROXY, SoundCategory.PLAYERS);
        this.sound = new PCMSound();
        this.volume = 1F;
        this.pitch = 1F;
        this.xPosF = (float)pos.getX()+0.5F;
        this.yPosF = (float)pos.getY()+0.5F;
        this.zPosF = (float)pos.getZ()+0.5F;
        this.repeat = false;
        this.repeatDelay = 0;
        this.attenuationType = AttenuationType.LINEAR;
        this.soundEventAccessor = new SoundEventAccessor(this.sound.getSoundLocation(), "mxtune.subtitle.pcm-proxy");
    }

    public MusicPositioned(ResourceLocation soundId, SoundCategory categoryIn, float volumeIn, float pitchIn, boolean repeatIn, int repeatDelayIn, ISound.AttenuationType attenuationTypeIn, float xIn, float yIn, float zIn)
    {
        super(soundId, categoryIn);
        this.volume = volumeIn;
        this.pitch = pitchIn;
        this.xPosF = xIn;
        this.yPosF = yIn;
        this.zPosF = zIn;
        this.repeat = repeatIn;
        this.repeatDelay = repeatDelayIn;
        this.attenuationType = attenuationTypeIn;
    }

}

@@ -707,119 +707,9 @@
 dio.
-ISound;%0Aimport net.minecraft.client.audio.PositionedSound;%0Aimport net.minecraft.client.audio.SoundEventAccessor
+*
 ;%0Aim
@@ -933,26 +933,22 @@
 nds 
-Positioned
+Moving
 Sound%0A%7B%0A
 %0A   
@@ -943,21 +943,35 @@
 Sound%0A%7B%0A
-%0A
     
+Integer playID;
 %0A    Sou
@@ -1038,16 +1038,32 @@
 itioned(
+Integer playID, 
 BlockPos
@@ -1138,16 +1138,46 @@
 AYERS);%0A
+        this.playID = playID;%0A
         
@@ -1420,16 +1420,50 @@
  false;%0A
+        this.donePlaying = false;%0A
         
@@ -1672,407 +1672,455 @@
     
-public MusicPositioned(ResourceLocation soundId, SoundCategory categoryIn, float volumeIn, float pitchIn, boolean repeatIn, int repeatDelayIn, ISound.AttenuationType attenuationTypeIn, float xIn, float yIn, float zIn)%0A    %7B%0A        super(soundId, categoryIn);%0A        this.volume = volumeIn;%0A        this.pitch = pitchIn;%0A        this.xPosF = xIn;%0A        this.yPosF = yIn;%0A        this.zPosF = zIn;
+@Override%0A    public SoundEventAccessor createAccessor(SoundHandler handler)%0A    %7B%0A        return this.soundEventAccessor;%0A    %7D%0A%0A    @Override%0A    public void update()%0A    %7B%0A        if (this.playID != null && ClientAudio.hasPlayID(playID))%0A        %7B%0A            /* update nothing - just hold the stream open until done */%0A        %7D%0A        else%0A        %7B%0A            this.setDonePlaying();%0A        %7D%0A%0A    %7D%0A%0A    public void setDonePlaying()%0A    %7B
 %0A   
@@ -2142,16 +2142,13 @@
 t = 
-repeatIn
+false
 ;%0A  
@@ -2162,92 +2162,63 @@
 his.
-repeatDelay = repeatDelayIn;%0A        this.attenuationType = attenuationTypeIn
+donePlaying = true;%0A        this.repeatDelay = 0
 ;%0A    %7D%0A
 %0A%7D%0A
@@ -2214,11 +2214,10 @@
 ;%0A    %7D%0A
-%0A
 %7D%0A

Add the basic guts to make the Band Amp work. Incomplete! mxTune is badly in need of a major refactoring.