Giter VIP home page Giter VIP logo

wine-audio-android's Introduction

wine-audio-android

The goal of this project is to enable low latency pcm audio for WINE running inside Debian chroot environment ("Debian noroot") in x86 Android tablet device. Instructions for running WINE inside Android http://forum.xda-developers.com/android/apps-games/guide-run-starcraft-x86-android-tablet-t2993529

Project contains source for a Android exectuable that read pcm stream from a named pipe and forward it to Android OpenSL 1.0.1 API. PCM stream begins with a header contains pcm format parameters (Samples per second, no. of channel, sample bit count). This server will allocate a buffered audio player from OpenSL for the pcm format read from steam header. Audio player creation can fail if the underlining platform cannot support requested format. Audio playback stop when pipe source is closed.

Includes a companion patch that modify Wine-1.4.1 alsa driver, make it write pcm samples to named pipe. This allows WINE running inside Android "chroot" send pcm stream directly to OpenSL and cut down audio latency.

COMPILATION:

PCM Server- add Android NDK location to $PATH and run ./build.sh, result executable is wine-audio. By default only x86 PIE(position independent executable) is build and can only be execute in device running x86 Android 4.1 and greater.

WINE- In Ubuntun/Debain host create a x86 build environment following pelya's xserver-debian guide: https://github.com/pelya/commandergenius/tree/sdl_android/project/jni/application/xserver-debian

Detail steps:

Prepare chroot environment:

    sudo apt-get install qemu-user-static
    
    sudo qemu-debootstrap --arch=i386 --verbose \
    
            --components=main,universe,restricted,multiverse \
            
            --include=fakeroot,libc-bin,locales-all,build-essential,sudo \
            
            wheezy wheezy-x86 http://ftp.ua.debian.org/debian/

Activate chroot:

    sudo chroot wheezy-x86

Add following to /etc/apt/sources.list inside chroot, then do sudo apt-get update:

    deb http://http.debian.net/debian/ wheezy contrib main non-free
    deb-src http://http.debian.net/debian/ wheezy main contrib
    
    deb http://security.debian.org/ wheezy/updates contrib main non-free
    deb-src http://security.debian.org/ wheezy/updates main contrib
    
    deb http://http.debian.net/debian/ wheezy-updates contrib main non-free
    deb-src http://http.debian.net/debian/ wheezy-updates main contrib
    
    deb http://http.debian.net/debian/ wheezy-backports contrib main non-free
    deb-src http://http.debian.net/debian/ wheezy-backports contrib main

Install development packages:

    sudo apt-get install bison libpixman-1-dev \
    
    libxfont-dev libxkbfile-dev libpciaccess-dev \
    
    xutils-dev xcb-proto python-xcbgen xsltproc \
    
    x11proto-bigreqs-dev x11proto-composite-dev \
    
    x11proto-core-dev x11proto-damage-dev \
    
    x11proto-dmx-dev x11proto-dri2-dev x11proto-fixes-dev \
    
    x11proto-fonts-dev x11proto-gl-dev \
    
    x11proto-input-dev x11proto-kb-dev \
    
    x11proto-print-dev x11proto-randr-dev \
    
    x11proto-record-dev x11proto-render-dev \
    
    x11proto-resource-dev x11proto-scrnsaver-dev \
    
    x11proto-video-dev x11proto-xcmisc-dev \
    
    x11proto-xext-dev x11proto-xf86bigfont-dev \
    
    x11proto-xf86dga-dev x11proto-xf86dri-dev \
    
    x11proto-xf86vidmode-dev x11proto-xinerama-dev \
    
    libxmuu-dev libxt-dev libsm-dev libice-dev libudev-dev \
    
    libxrender-dev libxrandr-dev curl autoconf automake libtool \
    
    pkg-config libjpeg-dev libpng-dev
    
    sudo apt-get install libasound2-dev

Get Wine source:

    sudo apt-get source wine

Apply alsa driver patch and build wine:

    cd wine-1.4.1
    
    patch -p1 < wine-alsa-pipe_sink.patch
    
    ./configure
    
    make

Find patched alsa driver module under dlls/winealsa.drv/winealsa.drv.so

INSTALLATION:

Connect Android tablet to host. transfer both wine-audio and winealsa.drv.so to SDCARD

    adb push winealsa.drv.so /sdcard/
    
    adb push wine-audio /sdcard/

On tablet: Install "Debian noroot" from Google Play:

https://play.google.com/store/apps/details?id=com.cuntubuntu&hl=en Launch Debain and get to XSDL/Xfce desktop. Double click on Enable Audio icon or install pulseaudio manually.

Double click User Terminal icon to launch a terminal and install wine:

    fakeroot apt-get install wine

Copy executable and driver from SDCARD:

    cd /
    cp /sdcard/wine-audio .
    chmod 777 wine-audio  
    cd /usr/lib/i386-linux-gnu/wine
    mv winealsa.drv.so winealsa.drv.so-official
    cp /sdcard/winealsa.drv.so .
    chmod 644 winealsa.drv.so

Add a command to lauch wine-audio in /proot.sh (It may be difficult to edit file on tablet. You can transfer proot.sh to host , edit it with unix text file friendly editor and transfer it back)

Add "./wine-audio &" to /proot.sh right after these line:

    ...
    
    done
    echo "STORAGE $STORAGE"
    
    ./wine-audio &    <--- new command
    
    ...

Wine-audio server will now start whenever you launch Debian chroot in Android

In host create a wine-audio.reg file for configure wine audio with following lines:

    REGEDIT4
    
    [HKEY_CURRENT_USER\Software\Wine\DirectSound]
    "HalBuflen"="16384"
    "SndQueueMax"="4"

Transfer wine-audio.reg to tablet and update wine registry with it:

In host:

    adb push wine-audio.reg /sdcard/

In tablet Debian terminal emulator:

    regedit /sdcard/wine-audio.reg

Exit Debian chroot and launch it again to kickstart audio server. Start a wine application/game that play pcm audio. If you hear choppy audio, try double value of HalBuflen and/or SndQueueMax, update wine registry with new value and test again.

wine-audio-android's People

Contributors

alan11ma avatar

Stargazers

Canwdev avatar

Watchers

 avatar

wine-audio-android's Issues

Audio support

Debian noroot now has slightly better audio support - PulseAudio server is built right into X server.
I might create native Android PulseAudio output plugin using your OpenSL code, to decrease latency, because currently it uses AudioTrack and some pipes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.