UBports Robot Logo UBports Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    [How-To] Record Calls

    Scheduled Pinned Locked Moved Support
    73 Posts 12 Posters 17.5k Views 12 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      This topic has been deleted. Only users with topic management privileges can see it.
      • Br1B Offline
        Br1
        last edited by Br1

        Before using these scripts read the DISCLAIMER here.

        To perform this how-to you must be familiar with the command line, as I mentioned in other post ( @klh excuse the off-topic ) I created a service to record all calls.

        The first step is run :

        arecord file.wav
        

        make a call and then stop recording with Ctrl+C

        play recorded call, if voices are not clearly heard unfortunately this how-to is already over 😞

        otherwise you can proceed ...

        • You have to create callrecorder service, to create it mount root in read/write mode :
        sudo mount -o remount,rw /
        

        sudo nano /etc/init.d/callrecorder :

        #! /bin/sh
        
        ### BEGIN INIT INFO
        # Provides:          callrecorder
        # Required-Start:    $local_fs
        # Required-Stop:     &local_fs
        # Default-Start:     2 3 4 5
        # Default-Stop:      0 1 6
        # Short-Description: Call Recorder
        # Description:       Call Recorder Daemon
        ### END INIT INFO
        
        # Written by Br1 <br1@spacelinux.it>
        
        case "$1" in
          start)
            echo "Call recorder starting ..."
            bash -c 'cd /home/phablet/.callrec/ && ./prepare-sh &'
           ;;
          stop)
            pkill manager.sh ; pkill ini.sh ; pkill ter.sh ; pkill ris.sh ;
            rm /home/phablet/.callrec/CallRecorder/.*swp 2> /dev/null ;
            rm /home/phablet/aRam/Rec_Call/.*swp 2> /dev/null ;
        
            echo "Call recorder stopped !"
            ;;
        
          *)
            echo "Usage: sudo service callrecorder {start|stop}"
            exit 1
            ;;
        esac
        
        exit 0
        

        and set permission with : sudo chmod 755 /etc/init.d/callrecorder

        enable autostart with : sudo update-rc.d callrecorder defaults
        ( if you want disable it : sudo update-rc.d -f callrecorder remove)

        • you have to create 3 directories :
          /home/phablet/aRam
          /home/phablet/.callrec
          /home/phablet/MyRec

        • and you also have to create 5 scripts :

        1 - nano /home phablet/.callrec/prepare-sh :

        #!/bin/sh
        
        # ----- start/stop service section -----
        #
        # check service status
        if ps aux | grep -q "[m]anager.sh" ; then echo "    ! Service already running !" ; exit
        
        fi
        
        # check if ramdisk is mounted and exec scripts
        if grep -qs '/phablet/aRam ' /proc/mounts ; then cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh & exit 
        
        fi
        
        # ----- boot section ----- 
        #
        /bin/sleep 10 ;
        
        # clear cache and buffer
        sh -c "free && sync && echo 3 > /proc/sys/vm/drop_caches && free" ;
        
        # create ramdisk
        mount -t tmpfs -o size=200M tmpfs /home/phablet/aRam ;
        
        # create directory
        mkdir -p /home/phablet/aRam/Rec_Call ;
        
        # copy scripts to directory just created
        cp -rp /home/phablet/.callrec/*.sh /home/phablet/aRam/Rec_Call ;
        
        # and exec them
        cd /home/phablet/aRam/Rec_Call ; ./manager.sh & ./ini.sh & ./ter.sh & ./ris.sh &
        
        exit
        

        2 - nano /home/phablet/.callrec/manager.sh :

        #!/bin/sh
        
        while true
        
        do
        
        FL1=/home/phablet/aRam/Rec_Call/fl1 ;
        FL2=/home/phablet/aRam/Rec_Call/fl2 ;
        FL3=/home/phablet/aRam/Rec_Call/fl3 ;
        RecDir=/home/phablet/MyRec ;
        HomDir=/home/phablet/aRam/Rec_Call ;
        
        # if fl1 exist ini.sh intercepted outgoing or incoming call
        if [ -f "$FL1" ]; then
        	# deletes temporary file and starts recording as phablet user (with .new extension)
        	rm -f $FL1 ; su phablet -s /usr/bin/arecord /home/phablet/MyRec/"$(date +%d_%m_%y__%H_%M_%S)".wav.new &
        fi
        
        # if fl2 exist call has ended 
        if [ -f "$FL2" ]; then
        	# deletes the temporary file and stop recording
        	rm -f $FL2 ; pkill -f arecord ; sleep 0.2 ;
        	# if fl3 exist call was answered
        	if [ -f "$FL3" ]; then
        		# delete .new extension and exec three scripts
        		rm -f $FL3 ; mv $RecDir/*.new $RecDir/"$(date +%d_%m_%y__%H_%M_%S)".wav ;  $HomDir/ini.sh & $HomDir/ter.sh & $HomDir/ris.sh &
        		else
        		# call was not answered
        		# delete recording and exec two scripts
        		rm $RecDir/*.new ; $HomDir/ini.sh & $HomDir/ter.sh &
        	fi
        
        fi
        
        sleep 1 ;
        
        done ;
        

        3 - nano /home/phablet/.callrec/ini.sh :

        #!/bin/sh
        
        cd /home/phablet/aRam/Rec_Call ;
        
        inicmline="dbus-monitor --system interface=org.ofono.VoiceCallManager member=CallAdded" ;
        
        $inicmline | while read line
        do
            echo $line | grep "incoming\|dialing"
                if [ "$?" -eq "0" ]; then
                echo "";/bin/touch fl1;echo "";
                break
            fi
        done
        

        4 - nano /home/phablet/.callrec/ter.sh :

        #!/bin/sh
        
        cd /home/phablet/aRam/Rec_Call ;
        
        tercmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
        
        $tercmline | while read line
        do
            echo $line | grep "disconnected"
                if [ "$?" -eq "0" ]; then
                echo "";/bin/touch fl2;echo "";
                break
            fi
        done
        

        5 - nano /home/phablet/.callrec/ris.sh :

        #!/bin/sh
        
        cd /home/phablet/aRam/Rec_Call ;
        
        riscmline="dbus-monitor --system interface=org.ofono.VoiceCall member=PropertyChanged" ;
        
        $riscmline | while read line
        do
            echo $line | grep "StartTime"
                if [ "$?" -eq "0" ]; then
                echo "";/bin/touch fl3;echo "";
                break
            fi
        done
        

        make all scripts executable with chmod u+x

        • you can start the service with : sudo service callrecorder start
          or reboot device

        -------- overview --- how it works --------

        • callrecorder service run prepare-sh script and allows you to stop the execution by terminating 4 running processes
        • prepare-sh creates ramdisk in order to speed up read/write operations, copies 4 scripts on ramdisk and executes them, some more details in scripts comments (any text after a hash sign '#')

        I was planning to make a single script always running and it didn't work, so I created a four scripts system :

        • manager.sh handles three child/processes scripts, each of them intercepts a string (dbus-monitor) creates temporary file and exit

        • ini.sh intercepts outgoing and incoming calls

        • ris.sh intercepts the start of phone communication (call was answered)

        • ter.sh intercepts the end of phone communication

        the last two would suffice, however, starting the recording at the beginning of phone communication, sometimes 1/2 seconds are lost ... so I preferred to start the recording on outgoing/incoming calls (if there is no answer recording is deleted)

        Calls are recorded in uncompressed format (wav) but if you periodically delete the recordings there will be no problems ... I prefer to convert them (to ogg format) daily with crontab managed script, if you want I attach it, but it will be necessary install ffmpeg (via apt), I will complete it to delete recordings older than 40 days.

        I hope I did not forget anything ... English is not my natural language, if something is not clear, you ask and I will try to explain better.

        I have not detected abnormal battery drain, maybe these scripts can be improved, anyway callrecorder service works fine on my Xiaomi Mi A2.

        I want to say Thanks to all volunteers working on UBports project, having linux on a smartphone is very rewarding 🙂

        ^

        • Google Pixel 3a XL
        • Xiaomi MI A2
        D 1 Reply Last reply Reply Quote 9
        • Br1B Br1 marked this topic as a regular topic on
        • D Offline
          domubpkm @Br1
          last edited by

          @br1 Thank you for your effort. Isn't that a good basis for doing a .click? As it stands, this will only be of interest to qualified users. Personally, the recorder allows me to record smartphone conversations quite easily.

          Br1B 2 Replies Last reply Reply Quote 1
          • Br1B Offline
            Br1 @domubpkm
            last edited by

            @domubpkm said in [How-To] Record Calls:

            Isn't that a good basis for doing a .click?

            I don’t know and I’d like to know ...
            I would also love to create a GUI for shell scripting but I don’t think it’s possible.

            ^

            • Google Pixel 3a XL
            • Xiaomi MI A2
            KenedaK 1 Reply Last reply Reply Quote 0
            • KenedaK Offline
              Keneda @Br1
              last edited by

              @br1
              https://open-store.io/app/touchide.daniel ?

              2015-2023 : Meizu MX4 ☠️⚰️✝️
              2023-2024 : Nexus 5 ☠️⚰️✝️
              2024-***** : FPOS Fairphone 5 waiting UT for freedom 😉
              🇲🇫🇬🇧

              1 Reply Last reply Reply Quote 0
              • Br1B Offline
                Br1 @domubpkm
                last edited by Br1

                --------- update ---------

                @domubpkm said in [How-To] Record Calls:

                As it stands, this will only be of interest to qualified users

                I've made it as easy as possible, only three steps :

                • first, use morph browser to download( just click) callrecorder.tar.gz from here (in addition to above scripts contains callrec-install script)

                • second, open file manager, go to Downloads click callrecorder.tar.gz and select extract archive

                • third, to run callrec-install open terminal and type :

                sudo Downloads/callrecorder/callrec-install
                

                callrec-install script will ask you to choose :

                type 1 to install callrecorder (reboot required)
                type 2 to uninstall it
                type 3 to exit from script

                you don't have to do anything else.

                Recorded calls are in MyRec directory, at device startup prepare.sh script will delete any that are older than 30 days.

                I recommend running callrec-install to uninstall callrecorder before proceeding to ota update.

                This is callrec-install script :

                #!/bin/bash
                
                CRSERV=/etc/init.d/callrecorder ;
                
                # Make sure only root can run this script
                if [ "$(id -u)" != "0" ]; then
                   echo "    Must be run as root, you must prepend sudo !" 1>&2
                   exit 1
                fi
                
                echo -e '\n - You can install / uninstall CallRecorder -\n' ;
                
                PS3='Please enter your choice : '
                options=("Install" "Uninstall" "Quit")
                select opt in "${options[@]}"
                do
                	case $opt in
                	"Install")
                
                 			echo -e '\n Installation in progress ...\n' ;
                
                			# creates 3 directories
                			su phablet -s /bin/mkdir /home/phablet/{.callrec,aRam,MyRec} ;
                			
                			cp /home/phablet/Downloads/callrecorder/* /home/phablet/.callrec/ ;
                
                			# change the working directory
                			cd /home/phablet/.callrec ;
                
                			# mount root in read/write mode
                			mount -o remount,rw / ;
                
                			# copy callrecorder service and enable autostart
                			cp callrecorder /etc/init.d/ ; update-rc.d callrecorder defaults ;
                
                			# roll back root in read only mode
                			mount -o remount,ro / ;
                
                			echo -e ' Installed, reboot your device !\n' ;
                			
                			exit 0
                
                		;;
                
                	"Uninstall")
                
                			# check status
                			if [ ! -f "$CRSERV" ]; then
                
                			echo -e '\n CallRecorder is not installed !\n' ; break
                
                			else
                
                			# mount root in read/write mode
                			mount -o remount,rw / ;
                
                			# stop callrecorder, disable autostart and remove service file
                			service callrecorder stop ; update-rc.d -f callrecorder remove ; rm /etc/init.d/callrecorder ;
                
                			# roll back root in read only mode
                			mount -o remount,ro / ;
                
                			# delete scripts and remove directories
                			rm -rf /home/phablet/.callrec/* ; rmdir /home/phablet/.callrec ;
                			rm -rf /home/phablet/MyRec/* ; rmdir /home/phablet/MyRec ;
                			rm -rf /home/phablet/aRam/* ;
                
                			echo -e '\n Done, CallRecorder uninstalled !\n'
                
                			exit 0
                
                			fi
                
                		;;
                
                        "Quit")
                			break
                		;;
                			*) echo "invalid option $REPLY"
                		;;
                    esac
                done
                

                ^

                • Google Pixel 3a XL
                • Xiaomi MI A2
                D BollyB 3 Replies Last reply Reply Quote 3
                • D Offline
                  domubpkm @Br1
                  last edited by

                  @br1 Anything that makes it user friendly is welcome, so thank you. To clarify, your recorder automatically records all conversations, correct? In what sound format?

                  Br1B 1 Reply Last reply Reply Quote 0
                  • Br1B Offline
                    Br1 @domubpkm
                    last edited by

                    @domubpkm said in [How-To] Record Calls:

                    To clarify, your recorder automatically records all conversations, correct? In what sound format?

                    Yes, that is correct, in wav format.

                    ^

                    • Google Pixel 3a XL
                    • Xiaomi MI A2
                    1 Reply Last reply Reply Quote -1
                    • D Offline
                      domubpkm @Br1
                      last edited by

                      @br1 said in [How-To] Record Calls:

                      script will delete any that are older than 30 days.

                      Perhaps the option should be provided:

                      • automatically erase recordings after ... days (between 0 and 30 days) ? 0 = never
                      Br1B 1 Reply Last reply Reply Quote 0
                      • Br1B Offline
                        Br1 @domubpkm
                        last edited by

                        @domubpkm said in [How-To] Record Calls:

                        Perhaps the option should be provided:

                        I'll work on it ...

                        automatically erase recordings after ... days (between 0 and 30 days) ? 0 = never

                        You can use uText app " Edit and save every file on your Phone" ... open filemanager and go to .callrec directory then click prepare.sh , open with uText app and find this line :

                        find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null ;
                        

                        replace "30" with days you want

                        or if you want to disable automatically erase you have to prepend the line with hash sign '#'

                        # find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null ;ù
                        

                        and save file, anyway wav is an uncompressed format, a rough estimate, 1-hour call about 30 megabytes ...

                        ^

                        • Google Pixel 3a XL
                        • Xiaomi MI A2
                        D 1 Reply Last reply Reply Quote 1
                        • D Offline
                          domubpkm @Br1
                          last edited by

                          @br1 Thanks again. I used the archive manager in ubuntu 20.04 to edit the line.

                          One more clarification: what do you mean by 'at de device startup' in the line 'at device startup prepare.sh script will delete any that are older than 30 days'. Does this mean every time we restart or reboot the smartphone ? So, for example, if there is no reboot for 3 months, all the records for the 3 months will be on the smartphone ?
                          And if we restart the smartphone after 25 days, how does the script understand this? The 30 day period is not reset?

                          Br1B 1 Reply Last reply Reply Quote 0
                          • Br1B Offline
                            Br1 @domubpkm
                            last edited by

                            @domubpkm said in [How-To] Record Calls:

                            Does this mean every time we restart or reboot the smartphone ? So, for example, if there is no reboot for 3 months, all the records for the 3 months will be on the smartphone ?

                            Yes 😞 the Linux-style solution is very simple ... a small script :

                            #!/bin/sh
                            find /home/phablet/MyRec/* -mtime +30 -exec rm {} \; 2> /dev/null 
                            

                            to be run daily via crontab ... but crontab requires (again) to mount root in read write mode, the easiest solution to avoid it is add the line to manager.sh, check would be carried out after each recording.

                            I'll be away for a week, but then I'll work on it.

                            ^

                            • Google Pixel 3a XL
                            • Xiaomi MI A2
                            D 1 Reply Last reply Reply Quote 0
                            • D Offline
                              domubpkm @Br1
                              last edited by

                              @br1 These are just improvements. I test on my ultra custom rc channel 😁 and it works fine. 👍
                              The wav format doesn't take up that much space because it's the lowest quality i think here.

                              1 Reply Last reply Reply Quote 0
                              • B Offline
                                Bocephus
                                last edited by

                                Sailfish has call recording built into the phone app with the push of a button. Just sayin'...

                                D 1 Reply Last reply Reply Quote -1
                                • D Offline
                                  domubpkm @Bocephus
                                  last edited by

                                  @bocephus Sailfish is not UT. If you have the knowledge, you can implement the mechanism you say. This will be greatly appreciated by the community. Personally, I thank all those who bring a positive point of contribution to UT on this forum.

                                  1 Reply Last reply Reply Quote 3
                                  • D Offline
                                    domubpkm
                                    last edited by

                                    As far as I'm concerned, .wav records from MyRec are not directly readable from this directory. If I copy this directory to the Music directory or to my SD card, I can.

                                    BollyB 1 Reply Last reply Reply Quote 0
                                    • BollyB Offline
                                      Bolly @domubpkm
                                      last edited by

                                      @domubpkm I can read them.

                                      2015-Now (Daily use) : BQ Aquaris E4.5 Ubuntu edition
                                      2016-Now (Daily use) : BQ Aquaris M10 FHD Betatester

                                      2020-Now : PinePhone Braveheart & CE UBports
                                      2020-Now (Family/Daily use): Vollaphone Xenial
                                      2022-Now (Family/Daily use): Vollaphone 22 Focal

                                      D 1 Reply Last reply Reply Quote 0
                                      • D Offline
                                        domubpkm @Bolly
                                        last edited by

                                        @bolly said in [How-To] Record Calls:

                                        I can read them

                                        Hello.
                                        What do you mean more specifically? What phone /channel ?

                                        BollyB 1 Reply Last reply Reply Quote 0
                                        • BollyB Offline
                                          Bolly @domubpkm
                                          last edited by Bolly

                                          Hello @domubpkm ,

                                          • E4.5 stable channel.
                                          • Installation with the script: https://forums.ubports.com/topic/8144/how-to-record-calls/4?_=1665911281738
                                          • Open file with file explorer and preview.

                                          2015-Now (Daily use) : BQ Aquaris E4.5 Ubuntu edition
                                          2016-Now (Daily use) : BQ Aquaris M10 FHD Betatester

                                          2020-Now : PinePhone Braveheart & CE UBports
                                          2020-Now (Family/Daily use): Vollaphone Xenial
                                          2022-Now (Family/Daily use): Vollaphone 22 Focal

                                          D 1 Reply Last reply Reply Quote 0
                                          • BollyB Bolly referenced this topic on
                                          • D Offline
                                            domubpkm @Bolly
                                            last edited by

                                            @bolly Exact. Preview on the line of selected wav file works but not preview on top.

                                            2022-10-16T09:37:16.255Z.png

                                            1 Reply Last reply Reply Quote 0
                                            • D Offline
                                              domubpkm
                                              last edited by domubpkm

                                              Hello @Br1 . I just noticed today, as it is my first try,
                                              that the sound reproduced from the recording in loudspeaker mode is not of good quality. Do you confirm it? If so, can you make the recording speakerphone compatible?

                                              Edit 10/30 : I note that recordings are named with their recording end time. Personally, it seems more logical to me that this is the start time of a recording: that's why I rename each recording with the times contained in the call log.

                                              1 Reply Last reply Reply Quote 0
                                              • First post
                                                Last post