add more details
This commit is contained in:
		
							parent
							
								
									db3b2efb1e
								
							
						
					
					
						commit
						583a50be79
					
				
							
								
								
									
										27
									
								
								README.md
								
								
								
								
							
							
						
						
									
										27
									
								
								README.md
								
								
								
								
							| 
						 | 
					@ -1,5 +1,32 @@
 | 
				
			||||||
# milkbucket
 | 
					# milkbucket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Build
 | 
				
			||||||
 | 
					milkbucket depends on the
 | 
				
			||||||
 | 
					[projectM](https://github.com/projectM-visualizer/projectm) library. To run
 | 
				
			||||||
 | 
					milkbucket, you'll need to install this library either by building it yourself,
 | 
				
			||||||
 | 
					or installing one of the builds from
 | 
				
			||||||
 | 
					[here](https://github.com/projectM-visualizer/projectm/actions). (If you've
 | 
				
			||||||
 | 
					never done this before, you'll want to download one of the "shared" artifacts
 | 
				
			||||||
 | 
					for your system. Then, copy the contents of the artifact's `include` folder to
 | 
				
			||||||
 | 
					`/usr/local/include` and the contents of the `lib` folder to `/usr/local/lib`.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					After installing projectM, build milkbucket with `go build`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Usage
 | 
				
			||||||
 | 
					milkbucket reads a PCM stream from standard input to generate visualizations.
 | 
				
			||||||
 | 
					If you have an audio file and a preset in mind, you can use `ffmpeg` to
 | 
				
			||||||
 | 
					generate the PCM stream, then pipe to milkbucket, like so:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					ffmpeg -i $audio -ar 44100 -f s16le - | ./milkbucket -p $preset
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that neither of these commands will output any audio! If you want to hear the audio at the same time (and assuming your machine uses pipewire), run:
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
ffmpeg -i $audio -ar 44100 -f s16le - | tee >(pw-play --rate=44100 --format=s16 -) | ./milkbucket -p $preset
 | 
					ffmpeg -i $audio -ar 44100 -f s16le - | tee >(pw-play --rate=44100 --format=s16 -) | ./milkbucket -p $preset
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					(If you don't use pipewire try using `aplay` instead of `pw-play`, or some other command for playing PCM streams.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also generate a visualization from your system sound. Assuming pipewire again, and that you have audio coming from Firefox, run:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					pw-record --target Firefox - | ./milkbucket -p $preset
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								cmd/root.go
								
								
								
								
							
							
						
						
									
										12
									
								
								cmd/root.go
								
								
								
								
							| 
						 | 
					@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
package cmd
 | 
					package cmd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
| 
						 | 
					@ -46,7 +47,16 @@ func handleEvent(event sdl.Event, m *milkDropWindow) bool {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func milkbucket(cmd *cobra.Command, args []string) {
 | 
					func milkbucket(cmd *cobra.Command, args []string) {
 | 
				
			||||||
	err := sdl.Init(sdl.INIT_VIDEO)
 | 
						fi, err := os.Stdin.Stat()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						size := fi.Size()
 | 
				
			||||||
 | 
						if size <= 0 {
 | 
				
			||||||
 | 
							log.Fatal("stdin is empty")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = sdl.Init(sdl.INIT_VIDEO)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue